将本机结构定义导出到托管代码

时间:2019-05-12 08:31:50

标签: c# c++-cli interop clr

我在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#使用的方法?

0 个答案:

没有答案