C++ 结构体在C#中托管调用,编译报错误is not supported by the language 5C

初学C#调用C++代码,想在C#中调用C++ 动态库的一个结构体,但编译时,报“XXX is not supported by the language”错误,不知道怎么修改。
代码如下:

C++:
#define TEST_STRUCT(name) [StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]\
typedef public ref struct name

namespace CPlusPlusDll {

TEST_STRUCT(A)
{
unsigned long a;

void operator=(const unsigned long val)
{
a = val;
}

unsigned long GetID()
{
return a;
}
}A;

TEST_STRUCT(B)
{
A aTest;
unsigned long c;
}B;

TEST_STRUCT(C)
{
B b;
C()
{
b.aTest = b.c;
}
}C;
}

C#:
using System;
using System.Runtime.InteropServices;
using CPlusPlusDll;

namespace CSharpTest
{
class Program
{
static void Main(string[] args)
{
B b = new B();
b.a.GetID();
int len = Marshal.SizeOf(typeof(B));
Console.WriteLine("length of B is: {0}", len);
Console.Read();
}
}
}

编译报错:
'CPlusPlusDll.C.b' is not supported by the language

请高手指点一下,要如何修改才能完全编译通过,在C#下可以使用?

1个回答

确保你C++那里的导出类型都是 CTS 类型

clover82625
clover82625 我不懂C++,能否详细说一下或者给出修改结果?谢谢!
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!