在C#中重用C中的结构

时间:2012-07-30 08:44:18

标签: c# c dll struct marshalling

是否可以从C dlls导入C#结构定义?

在我看到的所有例子中,都是用C#重新定义结构。如果结构改变怎么办?我需要在我的项目中改变两个位置......

struct MyCStruct
{
    unsigned long A;
    unsigned long B;
    unsigned long C;
};

并在C#中:

    [StructLayout(LayoutKind.Sequential)]
    internal struct MyCStructAgain
    {
        public uint A;
        public uint B;
        public uint C;
    }

如果无法重复使用这些定义,为什么会这样?

由于

1 个答案:

答案 0 :(得分:2)

您可以将结构编译为C ++ / CLI,编译器会为您生成托管副本,然后您可以引用它们。您需要一个ifdef来添加值以使其成为.NET结构。

#ifdef CLIEXPORT
#define value
#endif

CLIEXPORT struct MyCStruct
{
    unsigned long A;
    unsigned long B;
    unsigned long C;
};