将DLL与Visual C ++链接

时间:2012-06-25 08:32:48

标签: c++ visual-c++ dynamic-linking autoit

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

问题是链接器似乎无法链接到库。我在Properties-> Linker - >下添加了AutoItX3.lib作为附加依赖项。输入,并将目录添加到Properties - >链接器 - >一般 - >其他图书馆目录。无论我做什么,我仍然会遇到这些错误:

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中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

通常只提供DLL作为接口的平均值。许多软件提供商都这样做。这样做会产生以下影响(后果):

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

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