[英]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
是一个字节。 处理muc0
, muc1
等的代码将需要一些自定义属性。 您将整个事情当作一个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.