2012-03-26 11 views
1

私はJNIについて聞いたことがあり、それを使用しようとしました。例えばC/C++のみからJavaクラスを作成できますか?

class MyClass { 
    static { System.loadLibrary("myclass_impl.dll") } 
    native public int someFunction(String string); 
} 

、Pythonはそれによって、あなたは可能性がCから拡張クラスを作成することができません:私は何をしたいと思うことは、このようにはJavaコード、すなわち、CからJavaのクラスやC++ のみを作成することですまた、ctypesを使ってDLLからC関数をラップします。

Javaでこれを行う方法はありますか?

+1

私はあなたがJavaコードから直接コンパイルされたC \ C++で書かれた関数にアクセスしたいと思っていますか?それらをあなたのJava VMに書き込むのではなく、私はそれが起こっているのを見ません。それは、btwですが、おおまかにはPythonも同様です。 これは可能ですか?はい。実用的?そうでなければ、人々はあなたの例のようにJavaコードを書かなかったでしょう。 – len

答えて

3

ほぼ確実ではありません。 JavaクラスはJavaバイトコードで表現されなければなりません.CおよびC++は生成するために(通常は)備えられていません。さらに、JavaメモリモデルはCおよびC++のモデルとは大きく異なり、独自のレイアウト制約などが必要です。

基本的にJavaコンパイラ全体をC++で実装したいのでない限り、これを行うことができたら驚くでしょう。

+1

+1:それができなければ驚かれるだろうが、誰かがそうする正当な理由を思い付くなら、私は同じように驚くだろう。 C++プログラムから 'javac'を呼び出すことができます。 –

+0

@PeterLawrey:JREの一部ではないので、C++プログラムから 'javac'をコマンドとして呼び出すことはできません(JDKは実行時に必要ではないことに注意してください)。しかし実際のコンパイラクラスはしたがって、JNI経由で呼び出し可能にする必要があります。 –

+0

@JanHudec通常、JDKは必要ありませんが、通常はクラスを逆コンパイルする必要はありません。その場合は、これを行うために設計されたツールを使用することが理にかなっています。 –

関連する問題