需要的工具:两个命令行工具,一个是dumpbin.exe,另一个是lib.exe(我的vs2008,在D:\Programe Files\Microsoft Visual Studio 9.0\VC\bin下)。由于是命令行工具,需要用cmd打开(运行/cmd)。也许打开的任意一个工具的时候会遇到一个问题:缺少mspdb80.dll,那在***\Microsoft Visual Studio 9.0\Common7\IDE下面拷一个到工具的目录。【纠错:需要把mspdbsrv.exe、mspdbcore.dll 和 mspdb80.dll三个文件一起拷贝过去,把\Microsoft Visual Studio 9.0\Common7\IDE下的mspdbsrv.exe、mspdbcore.dll 和 mspdb80.dll三个文件一起考到Microsoft Visual Studio 9.0\VC\bin下】
开始实战
1、用dumpbin生成def文件
用命令行直接(cd)dumpbin.exe所在目录,输入命令"dumpbin Test.dll /EXPORTS /OUT:Test.def"(注意命令没有引号),其中Test.dll是你的dll文件名字(如果dll不在当前cmd目录,那名字得包含路径),Test.def是生成的def文件,也可以包含生成的文件路径(比如:C:/Test.def)。然后回车即可生成def文件。
2、修改def文件格式
dll生成的def文件内容如下:
File Type: DLL
Section contains the following exports for Test_DevelopDll_d.dll
00000000 characteristics
4E6AD271 time date stamp Sat Sep 10 10:58:57 2011
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 00011073 Add = @ILT+110(?Add@@YAHHH@Z)
2 1 000110BE Multiply = @ILT+185(?Multiply@@YAHHH@Z)
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
黑体字表明了导出的函数名,然后根据.def文件格式来修改dll导出的def文件。
修改后如下:
EXPORTS
Add @ 1
Multiply @ 2
保存修改后的def文件(假定现在修改后的def文件名为位Test.def)
3、用lib.exe生成lib文件
假定当前的cmd命令行目录还是在两个工具的目录下,直接输入命令:"lib /def:Test.def /MACHINE:IX86 /out:Test.lib"(注意命令没有引号),其中Test.def是修改后的def文件名(可写成绝对路径+名字),Test.lib是生成的lib文件名(名字可包含生成路径),然后回车,大功告成!