我想在我的C++項目中加載dll,但問題是我沒有我使用的dll的源代碼。所以我無法修改dll中的任何內容添加導出def文件,或者爲dll導出c方法。任何解決這種情況?如何在C++中加載dll
已經嘗試了加載庫函數,併成功加載了Dll。
如何在沒有def文件的情況下調用dll中的函數,或導出c方法?
我想在我的C++項目中加載dll,但問題是我沒有我使用的dll的源代碼。所以我無法修改dll中的任何內容添加導出def文件,或者爲dll導出c方法。任何解決這種情況?如何在C++中加載dll
已經嘗試了加載庫函數,併成功加載了Dll。
如何在沒有def文件的情況下調用dll中的函數,或導出c方法?
您需要知道DLL爲您提供了什麼。你應該得到一個帶有結構定義(如果有的話)和函數原型(包括調用約定)的頭文件。
您可以通過dumpbin /exports TheDll.dll
獲取導出函數的列表。您應該通過dumpbin
命令進一步檢查CPU。這避免了32/64位的麻煩。
您可以使用API函數LoadLibrary
加載任何兼容的DLL(32/64)。包含適當的標題以獲取原型。
使用GetProcAddress
函數可以得到指向導出函數的指針。如果你有函數簽名,你可以使用這個指針來調用函數。
感謝harper,曾在visual studio命令提示符下嘗試過dumpbin,並列出未裝飾的函數名稱並粘貼到GetProcAddress函數中,它的工作原理。 – user1219310
假設你在Windows系統上(因爲你提到DLL),你應該閱讀['LoadLibrary'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v= vs.85%29.aspx)及相關功能。 –
同意。另外如果你不知道這個DLL導出的函數,你可以下載一些工具來查看導出列表(我認爲DepencencyWalker是最好的) – LFF
你可以使用這個Dependency Walker [鏈接](http://www.dependencywalker。 COM /),PE瀏覽器等。找到導出的函數。找到導出的函數後,使用GetProcAddress函數加載該函數。 – Prasaathviki