在程式使用dll有兩個載入方式,一種是動態方式,就是loadlibrary載入dll,然後用getprocaddress來載入需要使用的dll函式。另一種就是靜態連線方式,將dll生成的lib,加入到工程中,然後使用時就像使用win api一樣使用。
今天我們不討論動態載入的方式,我們採用靜態載入的方式。但有乙個問題,由於很多dll發布的時候,根本就不提供lib,也或許你在使用乙個未公開的dll,沒有lib我們就不能靜態載入,我手工來生成吧。
手工生成
可以使用pe解析器 或者dumpbin獲取此dll所有匯出函式,然後將這些匯出函式名複製出來,新乙個***.def檔案,其中的***為你的dll檔名,格式如下:
exports
sqlite3_aggregate_context
sqlite3_aggregate_count
sqlite3_auto_extension
sqlite3_backup_finish
sqlite3_backup_init
sqlite3_backup_pagecount
sqlite3_backup_remaining
sqlite3_backup_step
sqlite3_bind_blob
sqlite3_bind_double
sqlite3_bind_int
sqlite3_bind_int64
將***.dll和***.def,放到乙個資料夾中,啟動「visual studio 2005 命令提示」,位置:
「開始」->」microsoft visual studio 2005″ -> 「visual studio tools」 -> 「visual studio 2005 命令提示」
將工作目錄切換到放有***.dll和***.def的資料夾中輸入:
lib /def:***.def /machine:x86
這樣將會產生乙個***.lib了,將此lib檔案和dll檔案拷到工程中,就可以進行靜態鏈結了。
ide生成
vs2005使用def檔案來生成dll與lib時,與vc6的設定是不一樣的。
vc6工程中,只要有def檔案並將其新增到工程中,vc6就可以自動地生成dll與其相應的lib檔案了。
但是vs2005不一樣,需要指定def檔案,方法如下:
把 sqlite.def 新增到工程中.
選擇 工程 > 屬性中的鏈結器,然後找到"輸入"這一項. 在 "模組定義檔案" 中輸入 sqlite.def。
注意: 你需要在 debug 和 release 中都輸入該項才行.
VS20XX使用DEF檔案來生成DLL與Lib
在程式使用dll有兩個載入方式,一種是動態方式,就是loadlibrary載入dll,然後用getprocaddress來載入需要使用的dll函式。另一種就是靜態連線方式,將dll生成的lib,加入到工程中,然後使用時就像使用win api一樣使用。今天我們不討論動態載入的方式,我們採用靜態載入的方...
VS 20XX 使用技巧總結
1 重構 如上圖 可以對 進行重新命名,提取方法,對私有的屬性進行封裝字段,對類可以提取介面,將方法中的變數提公升為方法中的引數,移除方法引數,重新排列方法引數。2 建立存根方法 3 控制c 格式 4 定義檢視的使用,開啟檢視 定義檢視。當移到乙個類時,在 定義檢視中能看到 的定義。本人認為還不如按...
VS2005使用DEF檔案來生成DLL與Lib
vs2005使用def檔案來生成dll與lib時,與vc6的設定是不一樣 的,搞的我鬱悶一下午.還好總算解決了 vc6工程中,只要有def檔案並將其新增到工程中,vc6就可以自動地生成dll與其相應的lib檔案了。但是vs2005不一樣,需要指定def檔案,方法如下 把 desdll.def 新增到...