2014-03-28 102 views
0

例如,我有一個結構:如何將非託管結構轉換爲託管並返回?

 
struct values { 
    int value1; 
    int value2; 
}; 

然後我初始化:

struct values *datas = (struct values *) malloc(size * sizeof(struct values));

並填充它。 所以,我需要將少數結構轉換爲託管,將其放入列表中,刪除一個結構並將其轉換回來。

基本上,我有幾個非託管結構,我需要用.net刪除一個,然後從內存中刪除它。

注意:對不起我的英文不好!

+0

您真的*在Visual Studio **中使用託管C++之前**到VS2005嗎?另外,爲什麼這個標籤C?你也在編譯.c文件嗎? – crashmstr

+0

對不起,我使用C++/cli。是的,我也編譯.c文件,結構被寫在c –

+0

託管結構與非託管結構不兼容,它具有不同的佈局。您一次將它們轉換爲一個字段。 –

回答

0

這是我自己的解決方案。 對於第一個我填的是結構

for (int i = 0 ; i < size ; i++) 
     { 
      (datas+i)->value1 = i; 
      (datas+i)->value2 = i; 
     } 

後,我創建了Class,從datas

public ref class Values 
{ 
private: 
    int _value1; 
    int _value2; 
public: 
    Values(); 
    property int Value1 
    { 
     int get(); 
     void set(int value); 
    } 
    property int Value2 
    { 
     int get(); 
     void set(int value); 
    } 
}; 

使保存的數據,我可以從我的結構填補List數據

 List<Values^>^ mValues = gcnew List<Values^>(); 

     for (int i = 0 ; i < size ; i++) 
     { 
      Values^ newValues = gcnew Values(); 
      newValues->Value1 = (datas+i)->value1; 
      newValues->Value2 = (datas+i)->value2; 

      mValues->Add(newValues); 
     } 

畢竟,我可以通過mValues->RemoveAt(1);刪除一個項目?清除內存free(datas);和重新結構與新的大小

size = mValues->Count; 
datas = (struct values *) malloc(size * sizeof(struct values)); 

,名單

for (int i = 0; i < size; i++) 
     { 
      Values^ curValue = mValues[i]; 
      (datas+i)->value1 = curValue->Value1; 
      (datas+i)->value2 = curValue->Value1; 
     } 

這一切,我希望它能夠幫助別人填滿它!

相關問題