2012-02-21 7 views
2

を渡しアンマネージドC++からC#のメソッドを呼び出す:私はC#で、次のようなもの持って戻って完全なオブジェクトモデル

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

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

を私は非管理には、このオブジェクトモデルを渡したいですC++。私。 'GetClassA():ClassA'のようなアンマネージC++コードからの呼び出しがあります。

これまでは、管理対象のC#から(COM/CCWを使用して)管理されていないC++に単一のオブジェクトまたはオブジェクトの配列を渡すことができましたが、その内部にClassBを継承していません。

私の質問は以下のとおりです。

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

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

答えて

0

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

  1. 使用C++/CLI:

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

  2. C#クラスからCOMオブジェクトを削除します。

いずれかを実行したくない場合は、コールバックをアンマネージコードなどに渡すことでやり直すことができます。しかし、私はそれが比較的難しく、乱雑になると思います。

+0

本当にC#メソッドを呼び出すことはできませんが、同じ概念であるCOMを使用して.netコードを呼び出すことができます。私はC#クラスからCOMオブジェクトを作成してうれしいですが、元の投稿に記載されているのと同じ構造を維持できますか?ありがとう。 – ahallan

関連する問題