.net - 如何将非托管结构转换为托管结构并返回?

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

例如,我有一个结构:

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/

相关文章:

c - 仅在 eclipse 中出现此错误 "not a structure or union"

c# - 奇怪的 Convert.ToDateTime 行为

c# - 通过反射获取公共(public)静态字段的值

c# - 为什么 ForEach Linq Extension 在 List 上而不是在 IEnumerable 上

c++ - 在 fork() 之后关闭监听套接字

c - 如何调用函数并使用其结果?

c# - 移动列表中的元素

c - C 中的梯形黎曼和

c - 如何访问作为指针确定的结构体的结构体成员?

ios - 如何快速检查对象属于类或结构