使用托管C++包装类(本机c ++),如何处理本机结构

本文关键字:本机 何处理 结构 处理 C++ 包装类 | 更新日期: 2023-09-27 18:27:04

namespace mcWrapper {
struct S1
{
    int n1;
    int n2;
};
class C1
{
public:
    void Test(S1* ps1)
    {
    };
};
public ref class Class1Wrapper
{
public:
    Class1Wrapper()
    {           
        _pC1 = new C1();
    };
    void Test(S1* ps1)
    {
        _pC1->Test(ps1);
    }
private:
    C1* _pC1;
};}

构建它,我们可以得到一个 .net dll .

创建一个 C# 客户端以使用此 dll:

//c#    
 public Form1()
    {
        InitializeComponent();            
        var c1 = new mcWrapper.Class1Wrapper();
        //we can find Test method , but we cannot type codes like: s1*
        c1.Test()//?????????????????????????????????
    }

我无法在 c# 中运行 Class1Wrapper.Test。

然后我尝试将 Test(( 更改为 Test( int^ n(,我发现 c# 将 Test(int^n( 解释为 Test(ValueType n(大家,我一直很困惑。

使用托管C++包装类(本机c ++),如何处理本机结构

因此,我应该做的是设置一个新的托管结构,如下所示:

public value struct CsS1{int n1;int n2} 

然后将测试(...(从

Class1Wrapper::Test(S1* ps1){_pc1->Test(ps1);}

Class1Wrapper::Test(CsS1* pcs1)
{
    S1* ps1 = new S1(); 
    ps1.n1=pcs1.n1; 
    ps1.n2=pcs.n2;
    _pc1->Test(ps1);
    delete ps1;
}

对于包装器来说,这是一项艰苦的工作。 我认为这是在浪费时间. 没有别的办法了吗?