14

Windows Phone 8 で C++ コードから C# メソッドを呼び出すことに興味があります。C++ コードのデリゲート宣言を介して、C# から C++ コードにコールバック関数を渡す方法は既に学習しましたが、できるかどうかを調べています。次のいずれか:

  • 特定のメソッドを C++ コードから直接呼び出します。これには、C++ から C# のオブジェクト構成を何らかの方法で検査する必要があり、私にはありそうにないように思えますが、とにかく皆さんに質問したいと思いました。

  • C# コードでイベントをトリガーし、C# メソッドで処理できるようにする

  • ディスパッチャーを使用してメイン UI スレッドで C# コールバックを呼び出し、コールバックが UI 要素を変更できるようにします。

  • ディスパッチャーを使用して、C# コードでイベントをトリガーします (基本的に、上記の 2 つのポイントをマージします)。

要するに、C++ -->C# コミュニケーションのヒントを皆さんが私に投げかけてくれる限り多く探しています。すべてを学びたいと思っています。:)

4

2 に答える 2

20

C# コードでオブジェクトを取得して Windows RT インターフェイスを実装し、このオブジェクトへの参照を渡すことで、少しセットアップするだけで上記のすべてを実行できます (正しく理解していれば、正確にはわかりません)。 Dispatcher の例を使いたい場合 - C# 側で Dispatcher をラップしたい場合があります)。

  1. Windows ランタイム コンポーネント ライブラリを作成します。
  2. public interface classC# が実装する (C++ を呼び出す) ための C++/CX ヘッダーで aを定義します (例: ICallback)。
  3. public ref classC++ の C++/CX ヘッダーで aを定義して実装 (C# から呼び出し) (例: CppCxClass)。
  4. CppCxClassを渡して格納するメソッドを追加しICallbackます。(簡潔にするために C++ グローバル変数が示されています。これを参照して、これをコードベースに格納するためのより良い場所を見つけられるかどうかを確認することをお勧めします)。

    ICallback^ globalCallback;
    ...
    void CppCxClass::SetCallback(ICallback ^callback)
    {
        globalCallback = callback;
    }
    
  5. C# コードで WinRT ライブラリを参照します。

  6. C# コード: CppCxClassusingのインスタンスを作成しますvar cppObject = new CppCxClass()
  7. C# コード: を実装するクラスを作成しますICallback(例: CSharpCallbackObject)。
  8. C# コード: CSharpCallbackObjectdown のインスタンスを C++ に渡します。例cppObject.SetCallback(new CSharpCallbackObject())

を使用して C# を呼び出すことができるようになりましたglobalCallback->CallCsharp(L"Hello C#");。どちらかを拡張したり、残りのタスクを実行しICallbackたりできるはずです。CppCxObject

于 2013-01-21T09:45:47.550 に答える