用visualc+链接DLL+; 我试图使用VisualC++ 2010提供的外部DLL(由AutoTX提供)。AutoItX提供了一个DLL,但由于某些原因不是库,所以我用Visual Studio生成了一个

用visualc+链接DLL+; 我试图使用VisualC++ 2010提供的外部DLL(由AutoTX提供)。AutoItX提供了一个DLL,但由于某些原因不是库,所以我用Visual Studio生成了一个,c++,visual-c++,dynamic-linking,autoit,C++,Visual C++,Dynamic Linking,Autoit,问题是链接器似乎在链接库时遇到问题。我在Properties->Linker->Inputs下添加了AutoItX3.lib作为附加依赖项,并将该目录添加到Properties->Linker->General->additional Library目录。无论我做什么,我仍然会遇到以下错误: 1>main.obj : error LNK2019: unresolved external symbol _AU3_Send@8 referenced in function _WinMain@1

问题是链接器似乎在链接库时遇到问题。我在Properties->Linker->Inputs下添加了AutoItX3.lib作为附加依赖项,并将该目录添加到Properties->Linker->General->additional Library目录。无论我做什么,我仍然会遇到以下错误:

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

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

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

要解决您的问题,您只需要删除放入VisualStudio配置中的静态依赖项(LIB),并在运行时使用LoadLibrary和GetProcAddress设置依赖项。通常只提供DLL作为接口的一种方式。许多软件供应商都这样做。这样做会产生以下影响(后果):

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

要解决您的问题,您只需删除放入VisualStudio配置中的静态依赖项(LIB),并在运行时使用LoadLibrary和GetProcAddress设置依赖项,谢谢。所以没有办法避免LoadLibrary和GetProcAddress?为什么在使用MinGW的Eclipse中,我可以直接链接到dll,并直接调用它们的函数?没有其他方法。实际上有些人直接访问PEB(),但这更困难。我不使用Eclipse,但我想它在LoadLibrary和GetProcAddress周围有一个包装器,使绑定看起来更平滑。谢谢。所以没有办法避免LoadLibrary和GetProcAddress?为什么在使用MinGW的Eclipse中,我可以直接链接到dll,并直接调用它们的函数?没有其他方法。实际上有些人直接访问PEB(),但这更困难。我不使用Eclipse,但我认为它在LoadLibrary和GetProcAddress周围有一个包装器,使绑定看起来更平滑。