我正在编写一个 C++ dll(Visual Studio 中的文件扩展名是 .cpp,但代码是 C),它使用 JNI 加载和调用一些 Java 类的实例方法。因此,我的项目由 C++ 源文件和头文件以及一些 Java 类文件(通过 JNI 使用的 Java 对象的类文件)组成。我想创建一个 dll 库,其中还包括“在单个包中”的 Java 类文件。是否可以将 C 和 Java 文件都放入 dll 中?
问问题
528 次
1 回答
1
这是完全可能的,尽管不一定是直观的。我没有测试过这个,但我想如果你知道你在做什么,它会很容易工作。
首先,您将需要一种方法将类文件的二进制文件打包到您拥有的本机二进制文件中,然后当然能够在任何时间点无缝读取该块。如何实现这一点取决于您自己,没有真正的“正确方法”可以做到。
话虽如此,如果您可以获得 .class 文件数据所在内存的句柄(在加载 DLL 之后)并将其作为byte[]
or传递给 Java ByteBuffer
,那么您将希望使用任何一个ClassLoader
'sdefineClass
重载以及一个电话findLoadedClass
,然后终于loadClass
。
这将允许您从几乎任何数据源加载类。正如我之前提到的,如何存储/检索类的本机数据取决于您。
于 2013-03-08T15:49:00.473 回答