关于不一致的dll链接

新手上路,请多包涵

如何删除此链接警告?您可以看到导致此警告的代码段。

 static AFX_EXTENSION_MODULE GuiCtrlsDLL = { NULL, NULL };
//bla bla
// Exported DLL initialization is run in context of running application
    extern "C" void WINAPI InitGuiCtrlsDLL()
    {
     // create a new CDynLinkLibrary for this app
      new CDynLinkLibrary(GuiCtrlsDLL);
     // nothing more to do
    }

警告 C4273:“InitGuiCtrlsDLL”:不一致的 dll 链接

我也有导出和导入定义,例如:

 #ifdef _GUICTRLS
   #define GUI_CTRLS_EXPORT __declspec(dllexport)
#else
   #define GUI_CTRLS_EXPORT  __declspec(dllimport)
#endif

原文由 baris.aydinoz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

有多种可能性:

  1. static AFX_EXTENSION_MODULE GuiCtrlsDLL = { NULL, NULL };

您使用 AFX_EXTENSION_MODULE。这意味着您正在实现一个 MFC 扩展 DLL。对于此类扩展 dll,您必须定义预处理器 _AFXEXT。在 Visual C++ 项目的 C++ 编译器设置中进行设置

看:

如何在 MFC 扩展 DLL 中使用 _declspec(dllexport):http: //support.microsoft.com/kb/128199

AFX_EXTENSION_MODULE 结构:http: //msdn.microsoft.com/en-us/library/sxfyk0zk.aspx

TN033:MFC 的 DLL 版本:http: //msdn.microsoft.com/en-us/library/hw85e4bb.aspx

  1. 您可能有重复的定义/声明。

原文由 Gökhan Akca 发布,翻译遵循 CC BY-SA 4.0 许可协议

用一个例子来详细说 明达米安 的答案。我读了它,但第一眼看不懂。

您有一个 共享 库,其中包含该函数的编译源文件。在一个新项目中,您使用库,此外还编译源文件以使用该函数(我忘记它已经在库中了)。在库中,函数标签被导出,在附加编译的源文件中,函数标签被标记为要导入。这就是冲突。

原文由 Ingo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题