DLL导入库生成的方法

当使用隐式链接的方法调用 DLL 中的导出函数时,需要代码的头文件、导入库lib和动态链接库。如何缺失导入库lib,将无法使用隐式链接的方式调用 DLL中的函数。幸运的是,通过一些手段可以从DLL中直接生成导入库lib。

生成导入库流程

步骤如下:

  • 从Dll中生成对应def文件,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
include '..\implib.inc'

; XYZLIBRARY.??4CXyz@@QAEAAV0@$$QAV0@@Z ord.1
implib XyzLibrary.dll, ??4CXyz@@QAEAAV0@$$QAV0@@Z
; XYZLIBRARY.??4CXyz@@QAEAAV0@ABV0@@Z ord.2
implib XyzLibrary.dll, ??4CXyz@@QAEAAV0@ABV0@@Z
; XYZLIBRARY.?Foo@CXyz@@QAEHH@Z ord.3
implib XyzLibrary.dll, ?Foo@CXyz@@QAEHH@Z
; XYZLIBRARY.GetXyz ord.4
implib XyzLibrary.dll, GetXyz
; XYZLIBRARY._GetXyz@0 ord.5
implib XyzLibrary.dll, _GetXyz@0
; XYZLIBRARY._XyzFoo@8 ord.6
implib XyzLibrary.dll, _XyzFoo@8
; XYZLIBRARY._XyzRelease@4 ord.7
implib XyzLibrary.dll, _XyzRelease@4

endlib
  • 根据def文件生成DLL的导入库lib

自动生成导入库

生成DLL导入库lib的方案有很多,最便利的方法是使用 ImpLib SDK 工具。具体教程如下:

  • 从官网下载最新的 ImpLib SDK 并解压,将 ImpLib SDK 的bin目录添加到系统环境变量 PATH 下。
  • 使用工具dll2def自动生成DLL的def文件
1
\bin\dll2def c:\windows\system32\kernel32.dll kernel32.def
  • 将生成的kernel32.def文件复制到 ImpLib SDK\src\Win32 文件下,然后运行 build_libs.bat,或者运行如下命令:
1
\bin\fasm kernel32.def kernel32.lib

参考链接

  1. DLL导出类和函数,by huangwang.
  2. ImpLib SDK Guide,by implib.