在 C# 库和 C++ (CLR) 之间传递对象

Posted

技术标签:

【中文标题】在 C# 库和 C++ (CLR) 之间传递对象【英文标题】:Passing objects between C# library and C++ (CLR) 【发布时间】:2014-02-12 05:05:16 【问题描述】:

如何将对象从 C# 库传递到 C++。

我可以调用返回voidint 的函数,没有任何问题。

现在考虑 C# 中的以下函数,

List<CSharpClass> CSharpFunction(string Input)

我的 C# 类包含的位置,

public class CSharpClass
 
    string mystring = string.Empty;
    byte[] bytearray = null;        

    public byte[] bytearray 
    
        get  return bytearray ; 
        set  bytearray = value; 
    

    public string mystring 
    
        get  return mystring ; 
        set  mystring = value; 
          

现在,我想在我的 C++ 中使用这个列表。所以我创造了,

  typedef std::vector<class CSharpClass>  MyDetailList;

这是正确的方法吗?如果不是我需要在 C++ 中使用什么?

【问题讨论】:

【参考方案1】:

如果你想从 C++ 代码调用 C# dll,你可以关注this article。 简而言之,您将不得不: - 编写一个包含您的 CSharpClass 的托管 DLL - 注册托管 DLL 以用于 COM 或本机 C++ - 从本机 C++ 代码调用托管 DLL

This SO question 也是相关的,如果您想避免使用 COM,它包含替代解决方案


最初的错误答案:

您可以查看this article 以获得相当不错的教程。 简而言之,您将不得不: - 从您的 c++ 代码编译 dll - 在 C# 和 C++ 之间编组(“翻译”)您的课程 - 通过使用 DllImport 声明从 C# 加载 dll - 调用导入的方法

【讨论】:

我有 C# dll,想获取 C++ 项目中的 byte[]。正如我所提到的,我可以调用一个返回 void 或 int 的函数,而不会出现任何问题。 哦,我的错,我误读了这个问题。将相应地编辑答案 感谢更新的答案,但我找不到任何答案来获取 C++ 项目中的 byte[] :(

以上是关于在 C# 库和 C++ (CLR) 之间传递对象的主要内容,如果未能解决你的问题,请参考以下文章

在c#silverlight中调用c++ clr dll

如何在 DLL 之间传递对象指针?

如何在pybind11中将共享指针列表传递给c++对象

如何在 C++ CLR 中将数组<System::Byte> 转换为 char*?

在 C++ 和 C# 之间传递向量结构

如何在 C++ 和 C# 之间传递字符串参数?