【问题标题】:Passing objects between C# library and C++ (CLR)在 C# 库和 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++ 中使用什么?

【问题讨论】:

    标签: c# c++ clr unmanaged unmanaged-memory


    【解决方案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[] :(
    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多