1

我正在尝试在 Visual C++ 2010 中使用外部 DLL(由 AutoItX 提供)。AutoItX 提供了一个 DLL,但由于某种原因不是 LIB,所以我用 Visual Studio 生成了一个。

问题是链接器似乎无法链接到库。我在 Properties->Linker -> Inputs 下添加了 AutoItX3.lib 作为附加依赖项,并将目录添加到 Properties -> Linker -> General -> Additional Library Directories。不管我做什么,我仍然得到这些错误:

1>main.obj : error LNK2019: unresolved external symbol _AU3_Send@8 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol _AU3_WinWaitActive@12 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol _AU3_Run@12 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol _AU3_Sleep@4 referenced in function _WinMain@16

AU3_Send、AU3_WinWaitActive、AU3_Run 和 AU3_Sleep 是程序 main.cpp 调用的函数。我真的没有想法,因为这些函数显然存在于 DLL 中。任何帮助,将不胜感激。

4

1 回答 1

1

仅提供 DLL 作为接口的手段是很常见的。许多软件提供商都这样做。这样做会产生以下影响(后果):

  • 客户端应用程序只能动态链接到提供的库(因此称为动态链接库)。提供者(库)和消费者(应用程序或任何其他库)之间的绑定是动态进行的。
  • 客户端必须使用 LoadLibray 和GetProcAddress才能绑定库并检索所需的符号(函数)
  • 图书馆和消费者之间的接口(合同)应通过头文件记录 - 例如参见 AutoIt3.h - (或任何其他文档,如帮助文件,..)
  • 没有提供 LIB(因为不需要它),因为链接发生在运行时,而不是在编译器/链接器时

要解决您的问题,您只需删除您放入 Visual Studio 配置中的静态依赖项(LIB),并在运行时使用 LoadLibrary 和 GetProcAddress 设置依赖项

于 2012-06-26T05:18:50.517 回答