过去我会使用#import
来访问动态链接库(即*.DLL
)公开的函数。现在看来Visual Studio有一个新的添加新引用选项。
项目 => 属性页 => 公共属性 => 参考
我的问题是:我应该使用哪种方法?
参考
以下方法用于公开我们库中的函数:
更新1
我注意到的一件事是:与C#不同,你可以在(1)GAC中添加对程序集的引用,(2)文件系统上的程序集,(3)解决方案中的项目。看来,在C ++中,您只能添加引用到当前解决方案中的项目。
答案 0 :(得分:5)
具体规则:
#import
应仅用于COM类型库。如果类型库嵌入可执行文件中,则.tlb文件或.dll / .ocx非常常见。编译器将类型库转换为.tli和.tlh文件,该文件包含编译器理解的格式的声明以及智能指针类型和包装函数,这使得处理内存管理和运行时错误变得更加容易。在C#中,你可以使用Add Reference或Tlbimp.exe来做同样的事情。
Add New Reference
适用于C ++ / CLI项目中的.NET程序集。编译器导入存储在程序集元数据中的类型声明,粗略等效于#include本机DLL的.h文件。与C#项目中的Add Reference完全等效。
#include
用于包含带声明的.h文件,这是告诉C ++编译器有关其他地方代码的常用方法。
从VS2012开始,Add New Reference
现在也可用于为静态库或DLL项目生成链接指令,该指令是解决方案的一部分。链接器只是获取链接项目的.lib文件的指令。没有C#中的等价物,它不使用链接器。
项目+属性>链接器>输入> Additional Dependencies
是其他方式,与前一个项目符号相同。如果.lib文件不是由解决方案中的项目生成的,则必须使用。
注意两组子弹之间的区别。前3个影响编译器,用于告诉它类型声明。后者2影响链接器,用于告诉它链接存储在别处的代码。
答案 1 :(得分:0)
我有同样的困境。我个人更喜欢进口。这让我觉得你的方法看起来更好一些。但主要原因是你可以通过这种方式导出头文件。没有它因为缺少lib文件而破坏。
但是我认为所有这一切都是个人偏好的问题。