如何将C/C++结构转换为C#
本文关键字:结构 转换 C++ | 更新日期: 2023-09-27 18:25:29
我想为程序编写一个插件。该程序只能使用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;
};
我需要改变什么?
如果希望数组内联,则需要使用固定大小的缓冲区。我假设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;
};