繁体   English   中英

如何在Visual Studio中链接DLL?

[英]How to link dll in visual studio?

要链接静态库,我必须从.h和.c文件创建.lib。 然后,将其添加到我的项目中,放入“其他依赖项”并进行编译。

要使用dll,我需要.dll和.lib。 该.lib与上述相同还是不同? 如何对Visual Studio说使用.dll和.lin而不是.lib? 我将.dll放到项目目录中,并且没有任何变化(.exe的大小相同(我认为应该更少))。

编译DLL项目时,您将获得一个DLL和一个LIB文件作为输出。 DLL包含实际的库代码; LIB文件包含导出函数的存根,这些存根帮助链接器发出代码以调用该DLL。

这与编译静态库时获得的LIB文件非常不同。 LIB文件包含构成该库的所有目标代码。 在构建可执行文件时,所有这些代码都直接链接到您的可执行文件中,因此,该名称的“静态”部分就会出现。

但是,实际使用方式非常相似。 无论链接到动态库还是静态库,都将链接器(使用“其他依赖项”)指向LIB文件。 剩下的由链接器完成; 它可以从LIB文件中得知应该执行的操作。

当然,您必须确保它是正确的LIB文件。 在同一个解决方案中同时拥有两个项目(DLL和EXE)将使您能够使用项目引用,从而使该任务本质上是万无一失的。

编辑:除非DLL导出功能,否则您在构建DLL时当然不会获得LIB文件。 (如果它不导出任何函数,则该DLL的客户端没有任何调用,因此没有理由使用LIB文件!)安排要从DLL导出函数的最简单方法是使用__declspec(dllexport)注释。 如果与宏结合使用,则可以在使用者方面安排它解析为__declspec(dllimport) ,从而允许您使用相同的头文件来构建DLL并从应用程序中使用它。 有关此的更多信息,请参见此处 或者,您可以将DEF文件与“ EXPORTS”部分一起使用

带有DLL的静态LIB或(小型)LIB,都需要一个头文件(或显式函数声明)。 但是,LIB之间的区别在于:

  • (动态)DLL :.LIB类似于头文件,而.DLL文件就像.CPP文件。 就像包含声明的标头一样,.LIB也包含导入定义。 就像CPP包含定义一样,.DLL也包含实际代码。
  • 静态LIB :就像整个类都在.H中实现(大多数情况下是在模板的情况下)一样,并且没有附加的.CPP文件-这种LIB包含程序正常工作的所有代码。 就像链接程序不会抱怨缺少实现(在上述情况下为.CPP)一样,加载程序(OS)也不会抱怨缺少DLL。

    基于DLL的库很小,而静态库则很大(在这里以.H / .CPP类推)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM