2012-03-26 4 views
1

Ich habe von JNI gehört und habe versucht, es zu benutzen. Was würde ich tun möchte, ist eine Java-Klasse von C erstellen oder C++ nur, dh kein Java-Code wie folgt aus:Kann ich Java-Klassen nur aus C/C++ erstellen?

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

Zum Beispiel Python Erweiterungsklassen von C erstellen können, wodurch könnte man wickeln Sie auch C-Funktionen aus einer DLL mit Ctypes.

Gibt es eine Möglichkeit, dies für Java zu tun?

+1

Darf ich verstehen, dass Sie auf Funktionen zugreifen möchten, die in C \ C++ geschrieben sind und direkt aus Ihrem Java-Code kompiliert wurden? Kurz davor, sie in Ihre Java VM zu schreiben, sehe ich das nicht. Das ist übrigens auch Python. Also, möglich? Ja. Praktisch? Nein, sonst hätten die Leute keinen Java-Code wie dein Beispiel geschrieben. – len

Antwort

3

Fast sicher nicht. Java-Klassen müssen in Java-Bytecode ausgedrückt werden, für den C und C++ nicht (normalerweise) eingerichtet sind. Darüber hinaus unterscheidet sich das Java-Speichermodell wesentlich von dem Modell in C und C++ und erfordert seine eigenen ungewöhnlichen Layoutbeschränkungen und dergleichen.

Es sei denn, Sie möchten im Wesentlichen einen vollständigen Java-Compiler in C++ implementieren, wäre ich überrascht, wenn dies getan werden könnte.

+1

+1: Ich wäre überrascht, wenn es nicht möglich wäre, aber ich wäre genauso überrascht, wenn jemand einen guten Grund dafür hätte. Sie können 'javac' einfach von einem C++ Programm aufrufen. –

+0

@PeterLawrey: Sie können 'javac' nicht als Befehl vom C++ - Programm aufrufen, da es nicht Teil von JRE ist (denken Sie daran, dass JDK zur Laufzeit nicht benötigt wird), aber die eigentliche Compiler-Klasse sollte und sein sollte daher über JNI aufrufbar sein. –

+0

@ JanHudec Normalerweise brauchen Sie das JDK nicht, aber normalerweise müssen Sie eine Klasse nicht dekompilieren. In diesem Fall ist es sinnvoll, das dafür vorgesehene Werkzeug zu verwenden. –

Verwandte Themen