将 3rd-party C++ DLL 引用到 VS 2013 项目中

Posted

技术标签:

【中文标题】将 3rd-party C++ DLL 引用到 VS 2013 项目中【英文标题】:Reference 3rd-party C++ DLL into VS 2013 Project 【发布时间】:2014-07-02 20:03:31 【问题描述】:

我得到了一个用 C++ 编写的 DLL。除了 DLL,我还收到了所需的输入参数和预期的输出以及一个 .h 包含文件。

似乎无法将它作为参考包含在我的项目中。我的程序是右键单击引用并添加引用,单击浏览,然后双击 DLL。我得到的错误是:

无法添加对“c:......\dll”的引用。请确保 该文件是可访问的,并且它是一个有效的程序集或 COM 组件。

这个问题可能是由于 C++ 的名称混淆,但我不知道如何解决这个问题。 DLL 的作者告诉我,它是为遇到相同问题的另一位客户编写的,但最终成功地获得了引用。我无权联系那个“客户”,想知道是否有人有建议。

【问题讨论】:

【参考方案1】:

添加引用并不是从 C# 代码链接到此非托管 DLL 的方式。相反,您需要:

    将头文件转换为 C# p/invoke 调用,或 围绕非托管 DLL 创建一个 C++/CLI 包装器,并从 C# 项目中添加对它的引用。此选项通常涉及链接到应随 DLL 提供的 DLL 的 .lib 导入库。

【讨论】:

大卫,有性能考虑吗?一种方式比另一种方式更好?或者这没有什么区别? 作为一般规则,C++/CLI 更有可能更快。在现实世界的情况下,调用开销很少成为瓶颈。通常会根据哪个最方便做出决定。 David,我没有 C++ DLL 的源代码,目前我无法确定其中是否有我的 C# 应用程序可以引用的包装器。我从dependencywalker.com 下载了DependencyWalker,但真的不知道我在看什么。我获得了 DLL 的 .h 文件,并且也收到了 .LIB 文件。我已经搜索了示例/操作方法,但他们似乎认为我有 C++ 项目的源代码。我是否必须在我的 C# 项目中创建一个类来定义 C++ DLL 的强类型输入/输出对象? 你写了一个适配器。在托管方面是 C++/CLI 类。它们封装了非托管 C++ 代码。 感谢您帮助我更好地理解,我真的不知道如何为此编写适配器或您指向我的类。您是否知道任何适用于我需要做的事情的链接?

以上是关于将 3rd-party C++ DLL 引用到 VS 2013 项目中的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地将字符串引用从 c# 传递到 c++?

将 C++ DLL 添加到 C# 项目

在 Visual Studio 中添加对 C++ 项目的新 DLL 引用

如何将 COM 对象的 C# 引用传递给 C++ DLL

嵌入式单声道:将数组从 C# DLL 返回/复制到 C++

如何将 C++ 源文件和头文件添加到 C# .Net 项目? [复制]