我在C ++ / CLI程序集中有一个本机类型,并且接受该类型的托管函数。
#pragma unmanaged
struct NativeStruct
{
int foo;
};
#pragma managed
#pragma make_public(NativeStruct)
void DoStuff(NativeStruct ns)
{
// ...
}
在普通C#中,我希望能够创建一个NativeStruct
,设置foo
,并将其传递给DoSomething()
。使用make_public
确保类型是公共的,并且可以在C#端使用。 C#知道正确的大小,我什至可以创建一个实例。但是,C#对NativeStruct
的成员一无所知。
// C#
void SendMessage()
{
var ns = new NativeStruct();
ns.foo = 1; // Error!
DoStuff(ns);
}
我可以通过在VS对象浏览器中查看NativeStruct
的元数据来确认这一点。存在类型,但字段foo
不存在。
我可以使用StructLayoutAttribute
在C#中创建该结构的副本,但是其中会有几十个这些结构,而且我希望C ++ / CLI编译器能够自动输出等效数据。
反正有没有让编译器创建完整的结构定义以供C#使用的方法?