9 Stimmen

Kann C++ Java-Code aufrufen?

Ich weiß, dass Java-Code über JNI C++-Code aufrufen kann. Ist es jedoch möglich, Java-Code erneut aus C++ heraus über JNI oder mit einer anderen Methode aufzurufen?

11voto

Michael Anderson Punkte 65535

Ja, das kannst du auf jeden Fall. Hier ist ein Beispiel:

Hier ist die Java-Datei:

public class InvocationHelloWorld {
    public static void main(String[] args) {
        System.out.println("Hallo, Welt!");
        System.out.println("Argumente, die an dieses Programm gesendet wurden:");
        if (args.length == 0) {
            System.out.println("(Keine)");
        } else {
            for (int i=0; i

`Und hier ist etwas C++, das es verwendet:

void invoke_class(JNIEnv* env) {
  jclass helloWorldClass;
  jmethodID mainMethod;
  jobjectArray applicationArgs;
  jstring applicationArg0;

  helloWorldClass = (env)->FindClass("InvocationHelloWorld");
  if(! helloWorldClass )
  {
    std::cerr<<"Konnte \"InvocationHelloWorld\" nicht finden"<GetStaticMethodID(helloWorldClass, "main", "([Ljava/lang/String;)V");
  if(! mainMethod )
  {
    std::cerr<<"Konnte \"InvocationHelloWorld::main\" nicht finden"<NewObjectArray(1, (env)->FindClass("java/lang/String"), NULL);
  applicationArg0 = (env)->NewStringUTF("Von-C-Programm");
  (env)->SetObjectArrayElement(applicationArgs, 0, applicationArg0);

  (env)->CallStaticVoidMethod(helloWorldClass, mainMethod, applicationArgs);
}`

4voto

FearlessHyena Punkte 2646

Sie können auch SWIG verwenden, um automatisch die JNI-Dateien zu generieren. Die Einrichtung kann etwas knifflig sein, aber es ist sehr nützlich, wenn Sie viel C++-Code freigeben müssen.

http://www.swig.org/index.php

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X