在 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中文网其他相关文章!