http://blog.163.com/zhucongdzkd@126/blog/static/1399971932010814111127686/
VS2008引用dll
系統 VISTA
開發環境 VS2008
語言 C
情況 別人寫的dll,現在只有.dll、.h、.def,如何在自己VS的項目中引用
解決 VS引用dll需要.lib文件,所以首先用VS自帶的lib.exe生成.lib
事情經過:
(1) 在VS文件夾搜索lib.exe,發現總共有4個,其中一個如下:
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\lib.exe
雙擊運行之,出現“沒有找到mspdb80.dll,因此這個應用程序未能啓動。重新安裝應用程序可能會修復此問題。”
(2) 將C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\mspdb80.dll複製至C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\ ,則上述錯誤消失
(3) 爲了可以在cmd直接運行lib.exe,將lib.exe所在路徑,即C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\,添加至系統變量Path中,具體爲右鍵“計算機”->屬性->高級系統屬性->環境變量->系統變量->Path->增加";C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\ ",注意前面用以分隔的分號。
(4) 開始->運行->cmd
在命令行轉到.dll、.h、.def所在的文件夾下,運行lib /def:xxx.def,xxx爲你的def文件名。
(5) 在VS中,選定要應用該dll的項目,右鍵,屬性。鏈接器->輸入->附加依賴項,添加.lib文件
(6) 重新生成項目(F7),居然出現“ fatal error LNK1101: MSPDB80.DLL 的版本不正確;請再次檢查此產品的安裝”!暈......
(7) 將剛纔複製到C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\的mspdb80.dll刪除,再F7,編譯鏈接成功...暴汗...-_-!
PS1. lib.exe的用法
用法: LIB [選項] [文件]
選項:
/DEF[:文件名]
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
/EXPORT:符號
/EXTRACT:成員名
/INCLUDE:符號
/LIBPATH:目錄
/LIST[:文件名]
/LTCG
/MACHINE:{ARM|EBC|IA64|MIPS|MIPS16|MIPSFPU|MIPSFPU16|
SH4|THUMB|X64|X86}
/NAME:文件名
/NODEFAULTLIB[:庫]
/NOLOGO
/OUT:文件名
/REMOVE:成員名
/SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|
NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]]
/VERBOSE
/WX[:NO]
PS2: 只有.h和.dll,沒有.def和.lib
請看下文,本人沒有實踐過。
Visual C++ 開發工具提供了兩個命令行工具,一個是dumpbin.exe,另一個是lib.exe。利用這兩個工具即可從dll導出其對應的lib。
1、在命令行執行:
dumpbin /exports yourdll.dll > yourdll.def
2、編輯 yourdll.def 文件,使之格式與.def文件格式一致。比如:
EXPORTS;
fn1;
fn2;
3、在命令行執行:
lib /def:yourdll.def /machine:i386 /out:yourdll.lib
|