2013-10-28 68 views
1

我在C++如下的結構定義:翻譯C++結構,以C#

struct check1 
{ 
    check1(USHORT vaultLen) 
    { 
    size = sizeof(*this->vaultLen) + vaultLen + sizeof(*this->digestKey); 
    buffer = new UCHAR[size]; 

    this->vaultLen = (USHORT*)buffer; 
    this->vaultData = buffer + sizeof(vaultLen); 
    this->digestKey = (UCHAR(*)[8])(buffer + sizeof(vaultLen) + vaultLen); 

    *(this->vaultLen) = vaultLen; 
    } 


    USHORT *vaultLen; 
    UCHAR *vaultData; 
    UCHAR (*digestKey)[8]; 

    UCHAR* buffer; 
    USHORT size; 
} 

我不希望使用不安全的代碼,所以指針是不允許的。什麼是C#中的等效結構?定義爲指針的成員是否實際佔用空間?

關於如何使用這個結構體,這個結構體的一個對象被創建並且它的大小成員被傳遞給一個int。

+0

您可以將其轉換爲某種格式,例如JSON或XML。但是指針佔用空間,通常是32或64位,基於你的架構。 – clcto

+4

你想要一個等效的C#結構,一個互操作類或其他東西嗎? –

+0

一個等效的C#結構 –

回答

1

未用於互操作看起來象是一個等價的C#結構:

public class check1 
{ 
    public byte[] digestKey = new byte[8]; 
    public List<byte> vaultData; 
} 

其他成員有沒有必要爲buffer僅僅是一個內存塊來保存digestKeyvaultData,其餘都是規模緩衝區以允許快速訪問各種數據成員緩衝區中的適當位置。

+0

那麼teh成員呢?因爲這就是我將在其他功能中使用的。 –

+1

如果您不打算將此用於非託管代碼之間的互操作,則大小成員(和構造函數的大小參數)是不必要的。您在C++結構中唯一真正的數據成員是您的'digestKey'和'vaultData'成員。其他一切只是用來管理內存(你不需要在C#中完成)。 –

+0

定義中vaultData成員的大小是多少?另外,爲了獲得整個班級的大小,Marshal.SizeOf應該足夠了? –