前幾天偶爾逛codeproject,發現了這個好東東。放在這里分享一下。
原文地址:http://www.codeproject.com/Articles/2752/How-to-create-lib-file-when-you-only-have-dll-and?msg=3572427#xx3572427xx
有時候你希望在自己的C代碼中調用別人的一個DLL,但是又沒有lib文件,就會很麻煩。由dll文件逆向生成lib文件手工方法網上已經有很多介紹了,自己百度一下啊
這個是將整個手工方法用makefile來自動完成。(btw:makefile真的很強大,專業程序員都應該學一學)
makefile代碼如下,文本編輯器復制粘貼后,另存為dll2lib.makefile
.SUFFIXES: .def .dll .lib
.def.lib:
lib /machine:IX86 /nodefaultlib /def:$*.def &
set retval=%? & del $*.exp > NUL & EXIT %retval
.dll.def:
echo LIBRARY $* > $*.def
echo EXPORTS >> $*.def
dumpbin /exports $*.dll | sed -n "s/


. 0


. \([^ ]*\)/ \1/p" >> $*.def
somedllname.lib: somedllname.def
運行需要的環境和工具:
sed.exe可
以從 http://sourceforge.net/projects/unxutils/files/下載,解包后在UnxUtils.zip\usr\local\wbin目錄可以找到
進入visual studio 命令行環境,
把你的dll文件改名為somedllname.dll,記得要把sed.exe放在同一個目錄下。
運行 namke dll2lib.makefile,自動生成somedllname.lib和somedllname.exp文件。
注意:這種方法對于沒有輸出函數名的dll是無效的。
關于visual c++名字修飾的詳細介紹,看這里
http://zh.wikipedia.org/wiki/Visual_C%2B%2B%E5%90%8D%E5%AD%97%E4%BF%AE%E9%A5%B0#.E7.B1.BB.E5.9E.8B.E7.9A.84.E7.BC.96.E7.A0.81.E8.A1.A8.E7.A4.BA