2

私はC#で次のようなものを持っています:

    public class ClassA
    {
        int Id  { get; set; }
        ClassB[] ClassBItems  { get; set; }    
    }  

    public class ClassB
    {
        int SomeOtherId {get;set;}
    }

このオブジェクト モデルをアンマネージ C++ に渡したいと考えています。つまり、「GetClassA() : ClassA」などのアンマネージ C++ コードからの呼び出しがあります。

これまでのところ、マネージ C# からアンマネージ C++ に (COM/CCW を使用して) 単一のオブジェクトまたはオブジェクトの配列を渡すことはできましたが、内部に ClassB を含む ClassA を渡すことはできませんでした。

私の質問は次のとおりです。

  1. その中に ClassB 配列がある ClassA を返すにはどうすればよいですか?
  2. これまでのところ、C# から構造体を返すことしかできませんでした。上記の例は、私が実際に戻したいクラスです。つまり、データへの参照です。

明確にするために、アンマネージ コードはマネージ コードを呼び出します。

4

1 に答える 1

0

あなたは本当にそれを直接行うことはできません。ネイティブ C++ から C# メソッドを呼び出すことはできず、その逆も同様です。何かを渡す場合、それは常に単純な Cstructであり、メソッドはありません。

しかし、それを回避する方法がいくつかあります。

  1. C++/CLI を使用します。
  2. C# クラスから COM オブジェクトを作成します。

どちらもやりたくない場合は、コールバックをアンマネージ コードに渡すか、そのような方法で試してみることができます。しかし、それは比較的難しくて面倒だと思います。

于 2012-02-21T16:56:41.787 に答える