繁体   English   中英

如何将C / C ++结构转换为C#

[英]How to convert C/C++ struct to C#

我想为程序编写一个插件。 该程序只能使用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 char是一个字节。 处理muc0muc1等的代码将需要一些自定义属性。 您将整个事情当作一个byte对待。

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 ++代码中使用的大小相同。

struct asdf{
string            mc;
double[]          md;

byte[]            muc;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM