[英]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.