首页 > 后端开发 > C++ > 如何在不依赖'COMPILING_DLL”的情况下有效处理共享库中的'dllexport”/'dllimport”?

如何在不依赖'COMPILING_DLL”的情况下有效处理共享库中的'dllexport”/'dllimport”?

Linda Hamilton
发布: 2024-11-30 21:23:14
原创
757 人浏览过

How Can I Effectively Handle `dllexport`/`dllimport` in Shared Libraries Without Relying on `COMPILING_DLL`?

dllexport/dllimport 开关的宏

在 Windows 上使用共享库时,需要定义适当的宏来导出和导入函数。传统方法涉及使用 COMPILING_DLL 宏。

定义 COMPILING_DLL

COMPILING_DLL 宏通常不会显式定义,并且依赖于 Visual Studio 的默认行为。默认情况下,在构建 DLL 项目时被视为已定义,而在客户端应用程序中使用 DLL 时则被视为未定义。但是,这种方法在使用加载时动态链接 (LTDL) 时可能会导致问题,即您无法在两种情况下使用相同的标头。

替代解决方案

使用 COMPILING_DLL 的一种替代方法是使用项目本地定义的默认宏。默认情况下,Visual Studio 为当前项目定义 MYDLL_EXPORTS 和 MYDLL_IMPORTS 等宏。这些宏可以按如下方式使用:

#ifdef  MYDLL_EXPORTS 
    /*Enabled as "export" while compiling the dll project*/
    #define DLLEXPORT __declspec(dllexport)  
#else
    /*Enabled as "import" in the Client side for using already created dll file*/
    #define DLLEXPORT __declspec(dllimport)  
#endif
登录后复制

在此示例中,项目名称为“MyDLL”,宏 MYDLL_EXPORTS 将在构建 DLL 项目时定义,而在外部使用时未定义。通过利用这些默认宏,您可以为这两种情况适当地定义 DLLEXPORT 宏,而不依赖于 COMPILING_DLL 的存在。

以上是如何在不依赖'COMPILING_DLL”的情况下有效处理共享库中的'dllexport”/'dllimport”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板