我有一个现有的 Java 项目,它需要来自用 C# 编写的 SDK 的功能。它应该打开一个 WPF 窗口并在关闭时将信息发送回 Java。
对于这两个世界的基本连接,我创建了一个调用本机函数的 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 中出现无法捕获的异常。我添加了一个检查字符串是否为空,这种基本方法现在可以正常工作。
我仍然不确定我是否有正确的方法,所以请随时贡献。