使用托管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(大家,我一直很困惑。
因此,我应该做的是设置一个新的托管结构,如下所示:
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;
}
对于包装器来说,这是一项艰苦的工作。 我认为这是在浪费时间. 没有别的办法了吗?