考虑下面的C ++结构,我需要使用CLI对其进行包装以使其可用于C#

typedef struct A
{
    int b[5];
    A* next;
};


我该怎么办?请帮忙。

非op编辑:

我尝试了以下内容:

  public ref struct ANET
    {
        array<int>^ b;
        ANET^ next;
        ANET()
        { b = gcnew array<int>(5) }
    };


现在,假设我们有一个A的对象的指针是a,ANET的对象的指针是aNET

nSize = sizeof(a->b)/sizeof(a->b[0]);
Marshal::Copy( IntPtr( ( void * ) a->b ), aNET->b, 0, nSize);


到目前为止,我已经能够在aNET-> b中获得a-> b的值,但是我一直坚持将a-> next的指针编组到aNET-> next。

谢谢

最佳答案

那是一个链表。因此,一种选择是编写C ++ / CLI代码以使本机链接列表适应.net LinkedList<T>。沿这条路线走下去,意味着只要在本机代码中对其进行了修改并需要返回到托管代码,就需要复制该列表。反之亦然。

如果不能制作副本,则应将本机链接列表包装在托管类中。因此,您根本不需要尝试转换结构定义。相反,您编写了一个C ++ / CLI托管类,该类封装了您需要公开的功能。我不能说太多了,因为您没有提供任何有关在此列表上需要执行的操作的信息。现在,您已经解释了什么是数据流。

08-19 17:30