1. 程式人生 > >error LNK2005: [email protected] 已經在 dllma

error LNK2005: [email protected] 已經在 dllma

今天遇到了同樣的問題,搜尋搜到了這裡,後來解決了。。。。。。。。
建立解決方案時,用的是WIN32 DLL,添加了MFC ATL的支援,自動生成檔案中是沒有現成的DllMain函式的。後來需要用到這個入口函式,所以自己人工添加了DllMain函式,除錯結果就報錯,退重複定義DllMain之類的。。。

從其它地方找到了解決辦法,這裡給大家分享下:

給專案新增一個dllmian.cpp,裡邊的內容為
// dllmain.cpp : 定義 DLL 應用程式的入口點。
#include "stdafx.h"

// global data

// The following symbol used to force inclusion of this module for _USRDLL
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
  DWORD ul_reason_for_call,
  LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

這樣問題就 解決了。。最重要的就是
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif
這段程式碼起到了強制執行你自定義的dllmain函式的作用。。