前几天偶尔逛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