你应该:#import或"添加新参考"?

时间:2015-05-08 20:04:16

标签: c++ visual-c++ visual-studio-2013

过去我会使用#import来访问动态链接库(即*.DLL)公开的函数。现在看来Visual Studio有一个新的添加新引用选项。

项目 => 属性页 => 公共属性 => 参考

我的问题是:我应该使用哪种方法?

参考

以下方法用于公开我们库中的函数:

更新1

我注意到的一件事是:与C#不同,你可以在(1)GAC中添加对程序集的引用,(2)文件系统上的程序集,(3)解决方案中的项目。看来,在C ++中,您只能添加引用到当前解决方案中的项目。

2 个答案:

答案 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文件而破坏。

但是我认为所有这一切都是个人偏好的问题。