【问题标题】:Should you: #import or "add new reference"?您应该:#import 还是“添加新参考”?
【发布时间】:2015-07-19 20:27:49
【问题描述】:

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

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

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

参考文献

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

更新 1

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

【问题讨论】:

  • References 使 Visual Studio 在编译您的应用程序之前编译引用的项目,就是这样。

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


【解决方案1】:

具体规则:

  • #import 只能用于 COM 类型库。如果类型库嵌入在可执行文件中,则为 .tlb 文件或 .dll/.ocx,非常常见。编译器将类型库转换为 .tli 和 .tlh 文件,其中包含编译器可以理解的格式的声明以及智能指针类型和包装函数,这使得处理内存管理和运行时错误变得更加容易。在 C# 中,您可以使用 Add Reference 或 Tlbimp.exe 来做同样的事情。

  • Add New Reference 适用于 C++/CLI 项目中的 .NET 程序集。编译器导入存储在程序集元数据中的类型声明,大致相当于 #include 本地 DLL 的 .h 文件。与 C# 项目中的添加引用完全相同。

  • #include 用于包含带有声明的 .h 文件,这是告诉 C++ 编译器有关其他地方的代码的常规方式。

  • 从 VS2012 开始,Add New Reference 现在也可用于为作为解决方案一部分的静态库或 DLL 项目生成链接指令。链接器只需获取链接项目的 .lib 文件的指令。在 C# 中没有等效项,它不使用链接器。

  • Project + Properties > Linker > Input > Additional Dependenciesother 与上一个项目符号执行相同操作的方法。如果.lib文件不是由解决方案中的项目生成的,则必须使用。

注意两组项目符号之间的区别。前 3 个影响编译器,用于告诉它类型声明。后两者影响链接器,用于告诉它链接存储在别处的代码。

【讨论】:

    【解决方案2】:

    嗯,我也有同样的困境。我个人更喜欢进口。这让我感觉你的方法更好一点。但主要原因是这样你可以只导出一个头文件。不会因为缺少 lib 文件而中断。

    但我认为这几乎是个人喜好问题。

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2021-04-27
      • 2018-09-28
      相关资源
      最近更新 更多