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