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