如何将非托管结构转换为托管和返回?

时间:2014-03-28 12:54:56

标签: .net c struct c++-cli unmanaged

例如,我有一个结构:

struct values {
    int value1;
    int value2;
};

然后我初始化它:

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

并填补它。 因此,我需要将少量结构转换为托管,将其放入List,删除一个结构并将其转换回来。

基本上,我有很少的非托管结构,我需要删除一个.net然后从内存中删除它。

注意:抱歉我的英文不好!

1 个答案:

答案 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);
    }
};

所以,我可以用我的struct

中的数据填充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;
        }

这就是全部,我希望它可以帮助别人!