huyutian

他强由他强,清风拂山岗;他横由他横,明月照大江。他自狠来他自恶,我自一口真气足

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 47 文章 :: 22 评论 :: 0 Trackbacks
前几天偶尔逛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
posted on 2014-10-19 09:18 胡雨田 阅读(1316) 评论(0)  编辑 收藏 引用 所属分类: 编程技巧

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理