1

一部の Java クラスのインスタンス メソッドの読み込みと呼び出しに JNI を使用する C++ dll (Visual Studio のファイル拡張子は .cpp ですが、コードは C です) を作成しています。その結果、私のプロジェクトは、C++ ソース ファイルとヘッダー ファイルに加えて、いくつかの Java クラス ファイル (JNI を介して使用される Java オブジェクトのクラス ファイル) で構成されています。Javaクラスファイルも「単一のバンドル」に含む単一のdllライブラリを作成したいと思います。C ファイルと Java ファイルの両方を dll に入れることは可能ですか?

4

1 に答える 1

1

これは完全に可能ですが、必ずしも直感的ではありません。私はこれをテストしていませんが、自分が何をしているのかを知っていれば簡単に機能すると思います。

まず、クラスファイルのバイナリを所有するネイティブバイナリにパッケージ化する方法が必要になります。もちろん、いつでもそのチャンクをシームレスに読み取ることができます。これをどのように達成するかはあなた次第です。それを行うための本当の「正しい方法」はありません。

そうは言っても、.classファイルのデータが存在するメモリへのハンドルを取得して(DLLをロードした後)、それをまたはとしてJavaに渡すことができる場合は、のオーバーロードのいずれかをと一緒に使用する必要がありbyte[]ます。への呼び出し、そして最後に。ByteBufferClassLoaderdefineClassfindLoadedClassloadClass

これにより、事実上すべてのデータソースからクラスをロードできます。前に述べたように、クラスのネイティブデータをどのように保存/取得するかはあなた次第です。

于 2013-03-08T15:49:00.473 に答える