java GraalVM生成的本机映像是否可以替换IKVM生成的DLL?

7bsow1i6  于 2023-05-21  发布在  Java
关注(0)|答案(2)|浏览(169)

我有一些Java应用程序和一些用C#实现的UWP应用程序的客户,通过Windows Store等分发,他想使用我的应用程序的一些部分。这些部分与操作系统无关,只解析一些特殊的二进制文件格式,应用一些使用YAML文件配置的业务逻辑。没有网络,图形用户界面,只有一些访问文件等。
我们目前使用IKVM来使感兴趣的代码对C#可用,但已经遇到了不同的问题。有些支持.NET Core,有些与Release中的nativetoolchain等有关。虽然现在的事情似乎工作后,应用一些变通办法,我正在寻找替代IKVM已经有点。
我目前使用IKVM的唯一一件事就是简单地使用ikvmc创建我的代码的DLL,然后可以在UWP项目中引用它。编译器总结如下:
ikvmc工具将Java字节码转换为.NET dll和exe。
这就是我想到创建GraalVM的本机Windows映像的原因。其他人似乎已经为Windows和according to the docs构建了本地二进制文件,GraalVM能够使用“--shared”创建共享库。据我所知,IKVM在.NET中实现了JVM,并根据需要和可能Map了一些东西。这听起来很像“Substrate VM”在本机映像的情况下所做的事情,不是吗?
此可执行文件包括应用程序、库、JDK,并且不在Java VM上运行,但包括必要的组件,如来自不同虚拟机(称为“Substrate VM”)的内存管理和线程调度。底层VM是运行时组件的名称(如deoptimizer,垃圾收集器,线程调度等)。
https://www.graalvm.org/docs/reference-manual/native-image/
那么,有没有可能一个DLL形式的本机映像可以替代当前由ikvmc创建的DLL?有没有人尝试过,有过经验?有没有人尝试过创建一个本地DLL并在其他本地Windows应用程序中使用它?从我的理解UWP“只”适用于额外的限制,其中一个可能能够再次工作。或者,这种方法由于某些原因是完全不可能的?
感谢您的输入!

tct7dpnv

tct7dpnv1#

我对IKVM项目不是很熟悉,所以这个答案主要是关于一般问题:
你能创建一个本地DLL/共享库,并在其他本地Windows应用程序中使用它吗?
应该有可能。您可以将Java代码编译到共享库中。入口点用@CEntrypoint注解标记。
然后,您可以使用生成的共享库和头文件从本机应用程序中使用您的库。
例如,GraalVM发行版默认使用GraalVM JIT编译器:

  1. GraalVM JIT是用Java编写的
    1.编译为与native-image共享的库
    1.用于热点。
    这里有一个页面描述了如何通过JNI从Java中使用这些:https://web.archive.org/web/20211212131233/https://www.graalvm.org/reference-manual/native-image/ImplementingNativeMethodsInJavaWithSVM/
    这可能非常类似于如何从C#应用程序中使用共享库。
cuxqih21

cuxqih212#

GraalVM本机映像不像IKVM.NET映像那样非常灵活。除非你喜欢编写 Package 器和玩P/Invoke,否则你应该坚持使用IKVM.NET。
注意:我在IKVM.NET fork后面

相关问题