C# で記述された SDK の機能を必要とする既存の Java プロジェクトがあります。WPF ウィンドウを開き、閉じるときに情報を Java に送り返す必要があります。
これら 2 つの世界の基本的な接続のために、ネイティブ関数を呼び出す Java プロジェクト ("DotNetCaller") を作成しました。これらは、C# プロジェクト (「DotNetApplication」) を呼び出す C++/CLI プロジェクト (「DotNetBridge」) で実装されます。
私はすでに C# で Java から文字列を設定し、C# から Java にコールバックすることができます。
しかし、WPFウィンドウを追加して起動しようとするとすぐに:
Application app = new Application();
app.Run(new DotNetWindow());
STA スレッドではクラッシュします。
DotNetApplication は mscorlib.resources を見つけられません。DLL を提供した後、PresentationFramework.resources が見つかりません。それを提供すると、DotNetApplication.resource が見つかりません (提供できません)。
DotNetApplication を単独で呼び出すか、DotNetBridge から呼び出すと、ウィンドウは期待どおりに表示されます。
ここで私が本当に欠けているものを誰か教えてもらえますか?
ありがとう
編集:
この例をもう一度見て、自分のニーズに合わせようとしました。「参照されたアセンブリ」で、ResolveEventHandler の dll ディレクトリを .NET ディレクトリに設定しました。
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0
C#でウィンドウを追加しました。
これも失敗しましたが、C# ではなく C++ 部分に新しい例外がありました。ResolveHandler が空の引数で呼び出されると、mscorelib でキャッチできない例外が発生します。String が空であるかどうかのチェックを追加し、この基本的なアプローチが正常に機能するようになりました。
これに対する正しいアプローチがあるかどうかはまだわかりませんので、お気軽に貢献してください。