解决共享MFC DLL中'error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义' 错误
解决共享 MFC DLL 中 'error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义' 错误
在使用共享 MFC DLL 项目时,你可能会遇到链接错误 'error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义'。这个错误通常是由于项目中存在多个定义了 DllMain 函数的源文件引起的。
问题原因:
共享 MFC 规则的 DLL 项目会自动生成一个包含 DllMain 函数定义的 dllmain.cpp 文件。如果你手动添加另一个定义了 DllMain 函数的 dllmain.cpp 文件或在其他源文件中定义 DllMain,就会导致重复定义错误。
解决方法:
-
删除手动添加的 dllmain.cpp 文件: 这是最简单的解决方案。删除任何你自己创建的 dllmain.cpp 文件,只保留 MFC 自动生成的文件。
-
重命名自定义的 DllMain 函数: 如果你需要在自定义的源文件中使用类似 DllMain 功能的代码,可以将函数重命名为其他名称,避免与 MFC 生成的 DllMain 冲突。
-
在自定义源文件中声明 DllMain: 如果确实需要在自定义源文件中使用 DllMain 函数,请在头文件中声明 DllMain,并在需要的地方调用它。
**示例:**cpp// 在头文件中声明 DllMainextern 'C' BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved);
// 在源文件中调用 DllMainBOOL MyFunction(){ // ... BOOL result = DllMain(hInstance, DLL_PROCESS_ATTACH, NULL); // ...}
通过以上步骤,你就可以解决 'error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义' 错误,并确保你的共享 MFC DLL 项目能够正常编译和链接。
原文地址: https://www.cveoy.top/t/topic/fAzX 著作权归作者所有。请勿转载和采集!