VS20XX使用DEF檔案來生成DLL與Lib

2021-05-11 18:23:09 字數 1346 閱讀 2788

在程式使用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 新增到...