我了解到您可以:
将.DLL文件转换为包含其导出函数的.DEF文件
(注:这在许多约定中不起作用)- 将.DEF文件转换为.LIB文件,以便您可以使用它来链接到DLL
为什么(大多数)链接器不能仅使用.DEF文件而不是.LIB文件来链接DLL?
我了解到您可以:
为什么(大多数)链接器不能仅使用.DEF文件而不是.LIB文件来链接DLL?
LoadLibrary()
,在VB中使用Declare Function ... Lib "Foo.dll" Alias "OrdinalName"
,在C#中使用[DllImport()]
。我从未使用过你所说的确切技术,将 .DEF 转换为 .LIB 等等... 但是,我想从一个库或 DLL 中导出 .DEF 应该很容易。这个我实际上做过,在一个项目中,DLL 代码是用 vbScript 构建的,它从主项目中获取代码,并将所有现有、已编译和测试过的代码创建成 API。之所以要进行这种复杂的操作,是因为我不知道 DLL 中会有哪些函数,因为主项目随时可能发生变化,因此静态的 .DEF 文件永远不起作用。因此,我必须先构建 DLL,捕获 dimpbin /exports
,取消装饰函数,然后构建 .DEF 文件并重新链接 DLL。
如果你发现自己处于这种情况下,也许你需要重新思考你的原始设计,并从那里解决问题...
至于 .LIB 文件,通常只有在需要静态链接时才需要,但当 .H 文件可用时,它们也会被使用,这通常使调试变得更加方便...