2012-03-30 147 views
1

我試圖使用__declspec(dllexport)在我的DLL中導出函數,但它不起作用。 當我在主應用程序中運行GetProcAddress時,它總是顯示「指定的模塊無法找到」。DLL導出__declspec(dllexport)不起作用

但如果我通過.def文件導出我的函數。它工作得很好。

你能幫我解決這個問題嗎?我想使用__declspec(dllexport)而不是.def文件。

非常感謝。 (我正在使用Visual C++ 2005,MFC)

回答

2

指定的模塊找不到

這是錯誤的錯誤信息,你只會得到,當調用LoadLibrary失敗。通常是因爲您使用了錯誤的文件名。 GetProcAddress()失敗,錯誤127,「找不到指定的過程」。

假設它實際上是導出的函數名稱,您沒有太多的選項用__declspec(dllexport)重命名該函數。您只有extern "C"可以抑制C++名稱變形。導出的名稱在其名稱前仍然有一個下劃線,@n在其名稱後面如果聲明瞭__stdcall。僅在64位代碼中或通過使用.def文件才能完全導出未修飾。

在DLL上使用dumpbin.exe/exports來查看實際名稱。如果先刪除.pdb文件,您將獲得更好的轉儲。 Depends.exe也很好。

+0

謝謝,我添加了extern「C」,它的工作原理。 – 2012-03-31 02:41:03

0

我希望在使用GetProcAddress時不會尋找正確的名稱。您是否使用了dumpbin或Dependency Walker來驗證導出函數的名稱?

+0

是的。我使用了Dependency Walker,並且我看到了我的函數被導出。 – 2012-03-30 17:32:16

+0

這不是功能找不到,而是dll ......正如Hans Passant所說的那樣。 – jsimpson 2012-03-30 17:48:31

相關問題