2013-09-26 89 views
2

我是初學者!我嘗試使用與舊DLL共享的MFC庫,但是當我用VC6編譯它時,我得到錯誤「LNK2005:_DllMain @ 12已經定義」。 我發現了很多解釋,但只消除「_USRDLL」這個問題消失,DLL工作。現在我對這個行爲的後果感到困惑。如果刪除_USRDLL預處理器定義,會有什麼後果?

另外,我在MSDN上讀到一個USRDLL對應於常規DLL靜態鏈接到MFC。所以,當我創建一個新的Win32動態鏈接用VC6庫,爲什麼「_USRDLL」已經存在,如果我在工程 - >設置 - > Genaral選擇「使用MFC共享DLL」或「不使用MFC」? 對不起,我的英語不好,謝謝你的幫助!

回答

2

常規DLL使用MFC從未擁有的DllMain。 這由CWinApp對象覆蓋。

只有擴展DLL有DllMain中。閱讀TN033。 在這種情況下_USRDLL必須被定義!

+0

謝謝,但我已經讀過TN033和TN011。在我的DLL裏面沒有DllMain,也許是其他的產生錯誤的東西。也許我打電話給其他圖書館之一,但我沒有找到一個。 另一個問題是,爲什麼一切都正常工作,如果我刪除_USRDLL預處理器定義,如果我這樣做究竟會在DLL改變。 非常感謝您的幫助! ;-) – Mark

+0

只需查看MFC頭文件。如果未定義_USRDLL,則會編譯大量代碼或更改deklarations。只要看看標題。此外,鏈接器還包含不同的模塊。 – xMRi

相關問題