簡體   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