生活的天平本不平衡,只有通过努力改变其偏向。

VS2005手工根据dll产生lib

2009-05-01

在程序使用Dll有两个加载方式,一种是动态方式,就是LoadLibrary载入Dll,然后用GetProcAddress来加载需要使用的Dll函数。另一种就是静态连接方式,将dll生成的lib,加入到工程中,然后使用时就像使用Win API一样使用。

今天我们不讨论动态载入的方式,我们采用静态载入的方式。但有一个问题,由于很多Dll发布的时候,根本就不提供lib,也或许你在使用一个未公开的dll,没有lib我们就不能静态加载,我手工来生成吧。

可以使用我写的PE解析器获取此Dll所有导出函数,如下图:

然后将这些导出函数名复制出来,新一个xxx.def文件,其中的xxx为你的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

将xxx.dll和xxx.def,放到一个文件夹中,启动“Visual Studio 2005 命令提示”,位置:
“开始”->”Microsoft Visual Studio 2005″ -> “Visual Studio Tools” -> “Visual Studio 2005 命令提示”

将工作目录切换到放有xxx.dll和xxx.def的文件夹中输入:

lib /def:xxx.def /MACHINE:x86

这样将会产生一个xxx.lib了,将此lib文件和dll文件拷到工程中,就可以进行静态链接了。

作者:lonkil | 分类目录:本站原创编程开发 | 标签:

5 条评论

  1. unknown user 说道:

    解决了困扰我的一个问题,非常感谢!

  2. lonkil 说道:

    两种方式,各有千秋。

  3. solu 说道:

    学习啦。
    我去找找动态加载和静态加载的区别。

  4. lonkil 说道:

    兄弟,过奖。小技巧而已。