将非托管类型结构指针转换为托管类型结构指针

时间:2012-12-31 12:15:58

标签: c# c++ .net c++-cli

考虑c ++中的以下结构,我需要使用CLI包装它以使其可用于C#

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

我该怎么办?请帮忙。

非操作编辑:

我尝试的是以下内容:

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

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

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

到目前为止,我能够在a-&gt; b中获得a-&gt; b的值,但我仍然困扰着a-&gt;指针旁边的a-&gt;接下来。

由于

1 个答案:

答案 0 :(得分:1)

这是一个链表。因此,一种选择是编写C ++ / CLI代码以使本机链表适应.net LinkedList<T>。沿着这条路线走下去意味着你需要在本机代码中修改列表的副本,并且需要返回到托管代码。反之亦然。

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