0

C++ で次の構造を検討してください。C# で使用できるようにするには、CLI を使用してこれをラップする必要があります。

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 のオブジェクトのポインターが 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 のポインターをマーシャリングすることに固執しています。

ありがとう

4

1 に答える 1

1

それが連結リストです。したがって、1 つのオプションは、C++/CLI コードを記述して、ネイティブ リンク リストを .net に適合させることですLinkedList<T>。このルートをたどると、リストがネイティブ コードで変更され、マネージ コードに返される必要があるときはいつでもリストのコピーを作成する必要があることを意味します。およびその逆。

コピーを作成できない場合は、ネイティブ リンク リストをマネージ クラスでラップする必要があります。したがって、構造体定義をまったく変換しようとはしません。代わりに、公開する必要がある機能をカプセル化する C++/CLI マネージ クラスを記述します。このリストで実行する必要がある操作に関する情報が提供されていないため、それ以上のことは言えません。これで、データ フローとは何かを説明しました。

于 2012-12-31T12:20:07.787 に答える