如何引用dll文件?
如何引用dll文件?
方法1:C#可以調(diào)用封裝好的基于純C的dll,但如果是C++的類,沒有很簡便的方法直接調(diào)用。使用方法:直接添加引用是不行的,使用DLLIMPORT。
2
方法2:把.dll放到exe程序所在的目錄,在C#里聲明,例如:[DllImport(\”DMC5480.dll\”,?EntryPoint?=?\”要調(diào)用的方法名\”,?CallingConvention?=?CallingConvention.Cdecl,?CharSet?=?CharSet.Ansi)]?public?static?extern?IntPtr?要調(diào)用的方法名();
3
方法3:使用?dllImport?導(dǎo)入。
具體參數(shù)還需要看到底怎么使用。也就說,在?C++?里面的函數(shù)除了簽名之外,還需要參數(shù)契約。
如何加載動態(tài)庫dll
可以通過兩種方式
1.隱式鏈接(需要.dll,.lib,.h)
2.顯式鏈接(需要.dll,.h)
方法1:隱式鏈接—-需要.lib,.dll,.h文件
隱式鏈接就是在程序開始執(zhí)行時就將DLL文件加載到內(nèi)存當(dāng)中,而顯示鏈接,是實時加載,程序需要的時候加載,不需要的時候,卸載。
這種方式需要DLL文件,以及相應(yīng)的Lib文件和頭文件。
只要沒有在程序中顯式鏈接的,都是隱式鏈接
Windows程序bin目錄包含了可執(zhí)行文件(.exe)和動態(tài)鏈接庫(.dlll),lib目錄包含了靜態(tài)庫。
步驟
**步:將.dll,lib,.h文件放入對應(yīng)的搜索路徑●其中動態(tài)庫的搜索路徑點擊這里查看,記住最重要的兩個1、項目當(dāng)前目錄(.cpp)目錄2、path環(huán)境變量中的目錄
●靜態(tài)庫的搜索路徑包括1、項目當(dāng)前目錄.cpp目錄(項目和解決方案的Debug不行)(也不是解決方案目錄)2、VC設(shè)置中的庫目錄(Library Directories)
注:如果lib庫不放到搜索路徑中,也可以在程序中添加
#pragmacomment(lib,\”D:/DLLTest.lib\”)//若是相對路徑,則為項目當(dāng)前.cpp目錄
●頭文件搜索路徑包括1、VC設(shè)置中的包含目錄(Include?Directories)
第二步:一定要在VC設(shè)置中的依賴項中添加你用到的庫的名字
**種(對應(yīng)上面每種搜索路徑1):針對數(shù)量較少的庫
設(shè)置.dll,.lib搜索路徑:直接將.dll,.lib,.h放入項目當(dāng)前目錄下(即含有項目源文件.cpp的目錄)
設(shè)置.h的搜索路徑:VC設(shè)置中的包含目錄(Include?Directories)加入你的.h路徑
然后在鏈接->輸入->附加依賴項中加入你要使用的靜態(tài)庫。
這里只添加靜態(tài)庫
就可以使用DLL中的函數(shù)了。
第二種(對應(yīng)上面每種搜索路徑2):針對數(shù)量比較多的庫(Opencv)
如Opencv,OSG等開源庫的配置
這種方式也是通常開源庫的配置方式,如Opencv,OSG等
步驟如下
步驟1. 添加DLL的目錄
方法1:★將dll目錄(通常為bin目錄)放入環(huán)境變量Path中(需要重啟),path是搜索動態(tài)庫的目錄
步驟2.添加靜態(tài)庫lib庫目錄和頭文件的目錄
在工程中的VC++目錄中添加靜態(tài)庫目錄和頭文件目錄。
步驟3.添加靜態(tài)庫
在鏈接->輸入->附加依賴項中加入你要使用的靜態(tài)庫(當(dāng)程序中調(diào)用時,會在上述配置的庫目錄中尋找這個庫)。
這里只添加靜態(tài)庫,動態(tài)庫的目錄已放入環(huán)境變量中,系統(tǒng)會搜索這個路徑的,自動加載.dll
如RmwRoadBoundaryStraightLineDLL.lib
然后,在程序中添加頭文件 (在上述配置的頭文件目錄中尋找),就可以使用DLL中的函數(shù)了。
方法2:顯式鏈接—需要DLL(不需要.lib,.h文件)
就是顯式加載DLL庫
注意:顯示鏈接,導(dǎo)出DLL的時候,采用extern “C”的方式,而不采用_declspec(dllexport),因為 _declspec(dllexport)會有一個”名字改編”的問題(采用了_cdecl調(diào)用規(guī)約的C++編譯方式)。
如何添加dll文件
A、去下個XX.dll,下好后打開系統(tǒng)盤,找到windows文件夾,打開后找到system32打開,把XX.dlll放進(jìn)去。這個DLL上百度一下就有得下的了。
B、打開騰訊電腦管家的電腦診所之后,搜缺失的dll文件,會自動出來,點立即修復(fù)。
重啟電腦后就可以了。
visual basic如何導(dǎo)入dll
這得看你的dll是什么類型的dll,若是帶函數(shù)輸出的dll,無需導(dǎo)入,直接像聲明api一樣聲明你所要使用的函數(shù)。若是active dll,可以點擊“工程->引用”里面添加dll。
怎么在DLL中導(dǎo)入導(dǎo)出
1)包含頭文件2)#pragma comment(lib, \”xxx.lib\”)/百科/導(dǎo)入lib如果僅僅是考慮dll導(dǎo)入導(dǎo)出問題的話,def文件等于_declspec(dllexport)語句。_declspec(dllexport)語句是告訴編譯器,在制作dll文件時,要導(dǎo)出的函數(shù)名或變量名,并且在編譯器中已經(jīng)設(shè)置要導(dǎo)出lib文件。
如果在dll文件中未聲明_declspec(dllexport),則即使編譯器設(shè)置了要導(dǎo)出lib文件,lib文件也不會被創(chuàng)建。
因此,要生成lib文件,必須指定_declspec(dllexport)和編譯器導(dǎo)出lib文件這兩件事情。當(dāng)然,如果dll文件未指定_declspec(dllexport),則必須自建def文件,告訴編譯器要在lib中生成被導(dǎo)出的函數(shù)和/或變量。def文件能做的事情遠(yuǎn)遠(yuǎn)比_declspec(dllexport)指令能做的事情多。應(yīng)該知道,被導(dǎo)出的函數(shù),在應(yīng)用程序中調(diào)用時,1可以通過函數(shù)名調(diào)用,2可以通過序數(shù)調(diào)用!2的做法很少見。
如果要通過序數(shù)來導(dǎo)出dll文件中的函數(shù),則定義def文件時非常方便的。如果樓主喜歡“魔獸爭霸”的話,看下“魔獸”的文件–storm.dll,可以發(fā)現(xiàn)里面全是用序數(shù)導(dǎo)出函數(shù)的,沒有函數(shù)名。這個在商業(yè)軟件中很常見,因此2的做法其實是很普遍,也很實用的做法–通過序數(shù)導(dǎo)出函數(shù)樓主如果熟悉def文件的話,應(yīng)該知道def文件的語法如果要打印出來,可能有近10頁A4紙的內(nèi)容。