c++ - 你应该: #import or "add new reference"?

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

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

项目 => 属性页 => 常用属性 => 引用

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

引用文献

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

更新1

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

最佳答案

具体规则:

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

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

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

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

  • 项目 + 属性 > 链接器 > 输入 > 附加依赖项 是执行与上一个项目符号相同的操作的其他方法。如果 .lib 文件不是由解决方案中的项目生成的,则必须使用。

请注意两组项目符号之间的区别。前 3 个影响编译器并用于告诉它有关类型声明的信息。后两个影响链接器并用于告诉它链接存储在其他地方的代码。

关于c++ - 你应该: #import or "add new reference"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132012/

相关文章:

c++ - 在 vc++ 中进行串行通信需要哪些函数?

c++ - 用 C/C++ for windows 开发时省略 msvcr100.dll?

c++ - 创建一个可以运行的DLL

c++ - 使用 Visual Assist X 创建 C++ 实现(一次所有函数)

c# - 在实现接口(interface)以满足 StyleCop 时如何自动化属性/方法 header

visual-studio-2013 - Visual Studio 2013 RC CodeLens 未显示

java - ZeroMQ 跨语言消息翻译 CPPZMQ -- JeroMQ -- PyZMQ

c++ - 查询内存位置

c++ - c++连接数据库

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?