5

我得到了一个小库,由一个 .dll、一个 .h 头文件和一个 .def 文件组成。我相当确定该库是用 C 编写的,但可能是 C++。

我是否可以在不使用通常谈论的 LoadLibrary/GetProcAddress/FreeLibrary 方法的情况下访问库中的函数。我没有 .lib 文件 - 通常有一个吗?

在过去的两天里,我一直在寻找这个。似乎因为我已经获得了一个定义我希望从 dll 使用的函数的头文件和一个 .def 文件,所以我不需要手动显式“加载”每个函数(LoadLibrary/GetProAddress/FreeLibrary) - 在在我的情况下,我将使用 .dll 中的大约 5 或 6 个函数,但大约有 70 个可用,这似乎会让人头疼,并导致不必要的代码混乱。

感谢您的任何建议。

4

3 回答 3

7

有几种方法可以为 DLL 创建导入库 - Microsoft 记录了一种通过构建您自己的 .DEF 文件来创建导入库的方法:

于 2009-03-14T18:40:20.177 回答
3

Visual C++ 有“lib”——在联机帮助中查找它。

使用“lib /def”制作 .lib 文件。

于 2009-03-14T19:01:17.240 回答
2

您需要一个 lib 文件 - 它包含链接器为您的 DLL 创建导入表所需的存根。

不确定这是否可行,但您可以尝试:

使用空存根和 .DEF 文件创建一个 .C 文件。编译为具有完全相同名称的 DLL 以生成 .lib。丢弃新的 DLL,并与 lib 链接,如果现有的 DLL 与您的 exe 位于同一目录中,则您的程序应该能够加载和绑定它。

我相信这会起作用,因为本机 DLL 没有强命名。

于 2009-03-14T18:37:57.827 回答