使用DEF文件来生成DLL与Lib

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

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

手工生成

可以使用PE解析器 或者dumpbin获取此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文件拷到工程中,就可以进行静态链接了。

IDE 生成

VS2005使用DEF文件来生成DLL与Lib时,与VC6的设置是不一样的。 
VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。 
但是VS2005不一样,需要指定DEF文件,方法如下:

把 sqlite.def 添加到工程中.

选择 工程 > 属性中的链接器,然后找到"输入"这一项. 在 "模块定义文件" 中输入 sqlite.def。

注意: 你需要在 Debug 和 Release 中都输入该项才行.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值