c# - 从 C++ 包装代码以在 C# 中使用

标签 c# c++ dll

<分区>

我有一个 C++ 项目,它包含一些头文件、cpps、一些 lib 文件和 DLL 文件。

我想包装这些文件以便在 C# 项目中使用它们。

我想制作一个包含所有 C++ 项目的 DLL,然后用 C# 类包装它,这样我就可以使用它了。

所以我的问题是(使用 Visual Studio 2010):

  1. 如何制作最终的 DLL 文件。

    一个。我知道如何将 lib 文件链接到项目,但如何链接 DLL?

    我需要将什么添加到我的 header 中,以便将其中声明的函数(在 lib 文件中实现)导入到 DLL 中。 (什么是 __declspec)?

  2. 构建最终的 DLL 文件后,如何创建使用此 DLL 文件的 C# 项目?

提前致谢

最佳答案

这称为 (COM) InterOp。幸运的是,原始 .NET Framework 的主要设计目标之一是促进托管代码和非托管代码之间的轻松互操作性。从广义上讲,在处理托管代码时,人们可能希望实现三种不同类型的互操作性。

  • 从托管代码调用 COM 组件

  • 从托管代码调用 native DLL。这称为平台调用或通俗地称为 PInvoke。 (这就是你想要的)

  • 允许 COM 组件通过使用运行时可调用包装器 (RCW) 包装托管代码来调用托管代码。这可以用作按计划逐步替换遗留代码的策略。

将数据从托管领域移动到非托管领域的过程称为编码。这是跨某个边界或其他边界对数据及其关联类型进行序列化的名称。为了支持这个过程,System.Runtime.InterOp 命名空间下存在一组类。

从广义上讲,该过程基本上如下:

  • 确定函数名称(我使用 Dependency Walker)
  • 确定函数签名(如果是 MSFT 的,请在 MSDN 上查找)
  • 确定代码所需的数据类型和结构
  • 编写托管代码以调入满足上述条件的 native 代码
  • 测试编写后的包装代码以确保它产生预期的结果(这通常是最乏味的部分)

关于c# - 从 C++ 包装代码以在 C# 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19835100/

相关文章:

php - 相似数据算法

c# - 使用回调从 Inno Setup 调用 C# DLL

c++ - 替换 Dll 中的类以进行单元测试

c# - Sql Server和.Net是如何处理一个存储过程的

C++:Chr() 和 unichr() 等效?

c# - CS1003 : Syntax error, '>' 预计在 Razor 中

c++ - 从 Linux 中的非子进程获取退出代码

.net - Visual Studio 2010 正在吞噬我的 DLL! - 构建后缺少引用的第三方 dll

c# - 在 XAML 中使用静态函数绑定(bind)

c# - 如何在 asp.net C# 中使用 Web 部件?