关于C ++中的动态链接库

时间:2011-12-22 10:54:17

标签: c++ dll

这个问题涉及库的动态链接以及应用程序中库的动态链接的使用。

例如,我们使用Visual Studio环境开发使用C ++的应用程序。

这里是我们在Additional Include Directories中指定的包含头文件,以及                                          在附加依赖项:Mylibrary.lib                                          在其他库目录中:我们指定库的路径

在Windows中,我们还有“LoadLibrary”API,用于加载动态链接的ibrary。

我的问题是

  1. 当我们在附加依赖项库中包含dll时,为什么我们应该使用“LoadLibrary”API?
  2. 什么时候应该使用“LoadLibrary”API?
  3. 谢谢!

3 个答案:

答案 0 :(得分:2)

如果dll不在运行的计算机上,

LoadLibrary允许您继续执行程序。它返回一个可以检查的错误状态,并可以继续执行。

此外,链接允许您执行诸如使用来自其他二进制文件和类的类的内容。其他。 LoadLibrary只允许您通过GetProcAddress找到功能。

答案 1 :(得分:0)

想象一下,你有一个软件,例如needes在确定的时间进行转换 Internet网络地址转换为字符串。 在Windows Vista或更高版本中,您可以使用也能够处理ipv6的“InetNtop”功能,但是如果您直接链接到DLL,您的程序将无法在较低的操作系统上运行(例如:windows xp)。 因此,最好的解决方案可能是制作2个DLL,其中一个使用“InetNtop”,另一个使用例如“inet_ntoa”。 然后你的“主”程序将根据他安装的操作系统在运行时执行“InetNtop DLL”的LoadLibrary或“inet_ntoa DLL”。

答案 2 :(得分:0)

您要求您可以在其他依赖项库中包含dll,然后使用loadlibrary。

首先让我们理解:

静态链接时,需要程序员将.lib文件添加到 附加库依赖项,在编译时链接到调用程序,

但是,Dll是动态加载的,因此当您使用LoadLibrary时,无需在附加库依赖项中添加dll;如果您明确地链接Dll,则不需要在附加库依赖项中提供您的dll路径。

请注意: 使用LoadLibrary,您将能够获取Dll句柄,您可以使用GetProcAddress调用导出的函数。

参阅: https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx