如何转换C/C++;结构到C#

如何转换C/C++;结构到C#,c#,dll,struct,interop,C#,Dll,Struct,Interop,我想为一个程序写一个插件。该程序只能使用C/C++*.dll库。我想在C语言中编写我的插件,所以我认为我可以通过COM从C++ DLL调用我的C函数。这很好,但现在我需要访问原始程序提供的结构。在C++中,这个结构看起来像: struct asdf{ char mc[64]; double md[10]; unsigned char muc[5]; unsigned char muc0 : 1; unsigned char muc1 : 1

我想为一个程序写一个插件。该程序只能使用C/C++*.dll库。我想在C语言中编写我的插件,所以我认为我可以通过COM从C++ DLL调用我的C函数。这很好,但现在我需要访问原始程序提供的结构。在C++中,这个结构看起来像:
struct asdf{
char            mc[64];
double          md[10];

unsigned char   muc[5];

unsigned char   muc0 : 1;
unsigned char   muc1 : 1;
unsigned char   muc2 : 6;
unsigned char   muc3;

another_struct st;
};
为了能够将该结构作为参数传递给C#,我尝试在C#中构建完全相同的结构。我尝试了以下操作,但它导致访问冲突:

struct asdf{
char[]            mc;
double[]          md;

byte[]   muc;

byte   muc0;
byte   muc1;
byte   muc2;
byte   muc3;

another_struct st;
};

<>我要改变什么?

我会稍微改变它,使用一个字符串,并确保在使用程序中的结构时,将数组输入到C++代码中使用的相同大小。

struct asdf{
string            mc;
double[]          md;

byte[]            muc;

byte              muc0;
byte              muc1;
byte              muc2;
byte              muc3;
};

如果希望数组内联,则需要使用。我假设C
char
是一个字节。处理
muc0
muc1
等的代码需要一些自定义属性。你把整个事情当作一个
字节

struct asdf
{
    public fixed byte    mc[64];
    public fixed double  md[10];

    public fixed byte    muc[5];

    private byte         mucbyte;

    // These properties extract muc0, muc1, and muc2
    public byte muc0 { get { return (byte)(mucbyte & 0x01); } }
    public byte muc1 { get { return (byte)((mucbyte >> 1) & 1); } }
    public byte muc2 { get { return (byte)((mucbyte >> 2) & 0x3f); } }

    public byte muc3;

    public another_struct st;
};

提示:使用C++/CLI进行互操作要容易得多;-)对于其他所有东西,看不到这一点,因为MUC0到MUC2只是C++一侧的一个字节。我不知道自动COM转换,但我确实认为,COM坚持这一点,您必须在链接问题中使用Marshallas(参见我的评论)。非常感谢我能够运行它!