我知道我需要使用LoadLibrary()。但是,爲了使用第三方DLL文件,還需要執行哪些其他步驟?如何在Visual Studio C++中使用第三方DLL文件?
我只是跳入C++,這是我沒有得到的唯一部分(作爲Java程序員)。我只是在研究如何使用Qt庫和tesseract-ocr,但這個過程對我來說沒有意義,而且對谷歌來說非常困難。
如何告訴編譯器我正在使用的函數?是否應該有來自第三方供應商的包含文件?
我知道我需要使用LoadLibrary()。但是,爲了使用第三方DLL文件,還需要執行哪些其他步驟?如何在Visual Studio C++中使用第三方DLL文件?
我只是跳入C++,這是我沒有得到的唯一部分(作爲Java程序員)。我只是在研究如何使用Qt庫和tesseract-ocr,但這個過程對我來說沒有意義,而且對谷歌來說非常困難。
如何告訴編譯器我正在使用的函數?是否應該有來自第三方供應商的包含文件?
正如其他人所說,LoadLibrary是難以實現的方式,而且幾乎沒有必要。
該DLL應該帶有一個用於鏈接的.lib文件,以及一個或多個頭文件到#include到源代碼中。頭文件將定義可以從DLL中使用的類和函數原型。即使使用LoadLibrary,您也需要這個。
要與庫鏈接,您可能需要將.lib文件添加到鏈接器/輸入/附加依賴關係下的項目配置。
謝謝,其他答案非常好(對我也很有用),但是這正是我想要的。 – Zombies 2009-01-30 15:28:44
這些都是在Windows上使用的DLL文件的方法有兩種:
有一種存根庫(.LIB)與相關的頭文件。當您將可執行文件鏈接到lib文件時,它會在啓動程序時自動加載DLL文件。
手動加載DLL。如果您正在開發一個插件系統,其中有許多DLL文件實現一個通用接口,那麼這通常是您想要做的。查看關於LoadLibrary和GetProcAddress的文檔以獲取更多信息。
對於Qt我會懷疑有頭文件和一個靜態庫可用,你可以在你的項目中包含和鏈接。
還有第三種方法,類似於你的第一種方式,使用`/ MT`開關,它將靜態鏈接你的庫。優點是[沒有動態鏈接開銷](http://www.codeproject.com/Articles/85391/Microsoft-Visual-C-Static-and-Dynamic-Libraries#StaticLibraryProperties)。但是,如果您也使用`/ clr`開關,則無法使用此功能。 – Abel 2014-11-08 01:32:21
這隻適用於標準庫。對於自定義庫(第三方),除非有人明確構建了可以鏈接的靜態版本,否則無法靜態鏈接dll。 – Laserallan 2014-11-09 18:26:13
我想你可以使用它,那麼第三方庫應該有一個* .lib文件以及一個* .dll文件。您只需將* .lib添加到項目「鏈接器」選項中的輸入文件列表中即可。這個* .lib文件不一定是一個'靜態'庫(它包含代碼):相反,* .lib可能只是一個將您的可執行文件鏈接到DLL的文件。
如果要在運行時延遲綁定並僅解析導入的函數,則只需要使用LoadLibrary。使用第三方DLL的最簡單方法是鏈接到.lib。
在回答您的編輯:
是,第三方API應該由一個DLL和/或包含聲明所需類型的實現和頭文件一個lib的。無論使用哪種方法,您都需要知道類型定義 - 對於LoadLibrary,您需要定義函數指針,以便您可以輕鬆編寫自己的頭文件。基本上,如果你想延遲綁定,你只需要使用LoadLibrary。一個有效的原因是如果你不確定dll是否可以在目標PC上使用。
爲了使用Qt動態鏈接時,你有
Properties » Linker » Input » Additional Dependencies
指定lib
文件(通常qtmaind.lib
,QtCored4.lib
和QtGuid4.lib
的「調試」 CONFIGRATION)。
您也可以指定路徑在庫是,即
Properties » Linker » General » Additional Library Directories
。
而你需要做相應的.dll
s爲在運行時可以訪問,通過在同一個文件夾或者將其存儲爲您.exe
或文件夾是你的路徑上英寸
要整合第三方的DLL到我的VS 2008的C++項目,我做了以下(你應該能夠轉化爲2010年,2012等)......
我把頭文件在我的解決方案與我的其他頭文件,更改我的代碼來調用DLL的函數(否則爲什麼我們會這樣做?)。 :^)然後我改變了構建,將LIB代碼鏈接到我的EXE中,將DLL複製到位,並在清理時清理它們 - 我在下面解釋這些更改。
假設您有兩個第三方DLL,A.DLL和B.DLL,並且每個(A.LIB和B.LIB)和頭文件(A.H和B.H)都有一個存根LIB文件。
(你將不得不作出下一組變化的一次,您使用(調試,發佈),每個源構建目標。 )
讓您的EXE取決於LIB文件
A.LIB B.LIB
$(SolutionDir)fodder
,則將其更改爲$(SolutionDir)fodder;$(SolutionDir)lib
以添加「lib」。強制DLL文件被複制到輸出目錄
XCOPY "$(SolutionDir)"\lib\*.DLL "$(TargetDir)" /D /K /Y
Copy DLLs to Target Directory
No
。點擊OK
。告訴VS清理DLL時清理它的輸出文件夾:
*.dll
添加到列表的末尾,然後單擊OK
。
您是否知道如何在Visual Studio 2012 for C++中添加第三方dll文件。請幫我解決一下這個。 – afzalex 2015-07-06 15:37:13