例如,我有一个结构:
struct values { int value1; int value2; };
然后我初始化它:
struct values *datas = (struct values *) malloc(size * sizeof(struct values) );
并填充它。 因此,我需要将一些结构转换为托管结构,将其放入列表中,删除一个结构并将其转换回来。
基本上,我有一些非托管结构,我需要使用 .net 删除一个结构,然后将其从内存中删除。
注意:抱歉我的英语不好!
最佳答案
这是我自己的解决方案。 首先,我填充结构
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;
}
以上就是全部内容,希望对大家有帮助!
关于.net - 如何将非托管结构转换为托管结构并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22713487/