2014-07-17 136 views
0

我想在我的C++項目中加載dll,但問題是我沒有我使用的dll的源代碼。所以我無法修改dll中的任何內容添加導出def文件,或者爲dll導出c方法。任何解決這種情況?如何在C++中加載dll

已經嘗試了加載庫函數,併成功加載了Dll。

如何在沒有def文件的情況下調用dll中的函數,或導出c方法?

+1

假設你在Windows系統上(因爲你提到DLL),你應該閱讀['LoadLibrary'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v= vs.85%29.aspx)及相關功能。 –

+1

同意。另外如果你不知道這個DLL導出的函數,你可以下載一些工具來查看導出列表(我認爲DepencencyWalker是最好的) – LFF

+1

你可以使用這個Dependency Walker [鏈接](http://www.dependencywalker。 COM /),PE瀏覽器等。找到導出的函數。找到導出的函數後,使用GetProcAddress函數加載該函數。 – Prasaathviki

回答

2

您需要知道DLL爲您提供了什麼。你應該得到一個帶有結構定義(如果有的話)和函數原型(包括調用約定)的頭文件。

您可以通過dumpbin /exports TheDll.dll獲取導出函數的列表。您應該通過dumpbin命令進一步檢查CPU。這避免了32/64位的麻煩。

您可以使用API​​函數LoadLibrary加載任何兼容的DLL(32/64)。包含適當的標題以獲取原型。

使用GetProcAddress函數可以得到指向導出函數的指針。如果你有函數簽名,你可以使用這個指針來調用函數。

+0

感謝harper,曾在visual studio命令提示符下嘗試過dumpbin,並列出未裝飾的函數名稱並粘貼到GetProcAddress函數中,它的工作原理。 – user1219310