c/c++语言开发共享从dlsym()返回值的函数?

愚蠢的问题,我肯定是一些不正确的语法。 如何让dlsym使用返回值的函数? 我在以下代码中得到错误’void *无效转换为LSError(*)()’ – 尝试编译linux lightscribe示例程序,希望我可以将它与OSX dylib链接(为什么地狱赢了惠普发布了一个真正的Cocoa SDK吗?LS只出现了什么?现在6到7年了?):

void* LSHandle = dlopen("liblightscribe.1.dylib", RTLD_LOCAL|RTLD_LAZY); if (LSHandle) { LSError (*LS_DiscPrinter_ReleaseExclusiveUse)() = dlsym(LSHandle, "LS_DiscPrinter_ReleaseExclusiveUse"); .. lsError = LS_DiscPrinter_ReleaseExclusiveUse( pDiscPrinter); 

    C标准实际上并没有定义转换到函数指针和从函数指针转换的行为。 解释因为原因而异; 最常见的是,并非所有体系结构都将函数指针实现为数据的简单指针。 在某些体系结构中,函数可能驻留在完全不同的内存段中,使用指向void的指针是无法寻址的。

    使用dlsym的“推荐”方式是:

      LSError (*LS_DiscPrinter_ReleaseExclusiveUse)(LS_DiscPrinterHandle); *(void **)&LS_DiscPrinter_ReleaseExclusiveUse = dlsym("LS_DiscPrinter_ReleaseExclusiveUse"); 

    有关详细信息,请阅读dlsym的POSIX页面上的基本原理和示例。

      以上就是c/c++开发分享从dlsym()返回值的函数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562629.html

      (0)
      上一篇 2021年2月5日
      下一篇 2021年2月5日

      精彩推荐