C# コードでオブジェクトを取得して Windows RT インターフェイスを実装し、このオブジェクトへの参照を渡すことで、少しセットアップするだけで上記のすべてを実行できます (正しく理解していれば、正確にはわかりません)。 Dispatcher の例を使いたい場合 - C# 側で Dispatcher をラップしたい場合があります)。
- Windows ランタイム コンポーネント ライブラリを作成します。
public interface classC# が実装する (C++ を呼び出す) ための C++/CX ヘッダーで aを定義します (例: ICallback)。
public ref classC++ の C++/CX ヘッダーで aを定義して実装 (C# から呼び出し) (例: CppCxClass)。
CppCxClassを渡して格納するメソッドを追加しICallbackます。(簡潔にするために C++ グローバル変数が示されています。これを参照して、これをコードベースに格納するためのより良い場所を見つけられるかどうかを確認することをお勧めします)。
ICallback^ globalCallback;
...
void CppCxClass::SetCallback(ICallback ^callback)
{
globalCallback = callback;
}
C# コードで WinRT ライブラリを参照します。
- C# コード:
CppCxClassusingのインスタンスを作成しますvar cppObject = new CppCxClass()。
- C# コード: を実装するクラスを作成します
ICallback(例: CSharpCallbackObject)。
- C# コード:
CSharpCallbackObjectdown のインスタンスを C++ に渡します。例cppObject.SetCallback(new CSharpCallbackObject())。
を使用して C# を呼び出すことができるようになりましたglobalCallback->CallCsharp(L"Hello C#");。どちらかを拡張したり、残りのタスクを実行しICallbackたりできるはずです。CppCxObject