Frage

Ist es möglich, eine Bibliothek für Java mit GCJ zu kompilieren, eine DLL zu erhalten und von Python Ctypes anzurufen?

Ich bin vorerst an Toxilibs interessiert, aber wenn jemand ein Spielzeugbeispiel kennt, wäre das großartig!

War es hilfreich?

Lösung

Wenn Sie Java-Python-Hooks wollen, wären Sie viel besser dran, Jython zu verwenden und dann über die Grenze zu rufen.

Ja, es ist jedoch möglich, eine externe Bibliothek von Java von Java anzurufen. Aber Sie brauchen GCJ nicht, um das zu tun. Vielmehr können Sie einfach eine JVM -Instanz in Ihrer Python -Laufzeit ansprechen und dann Ihre Methoden aufrufen.

JNI -Aufrufspezifikation

Grundsätzlich möchten Sie Ihre VM beim Start erstellen und dann Ihre Methoden (n) aufrufen, wann immer Sie möchten:

// Do this once per session, e.g. an __init__ 

JNI_CreateJavaVM(&jvm, &env, &vm_args); 

// When needed invoke Example.foo(int)
jclass cls =
env->FindClass("Example");  jmethodID
mid = env->GetStaticMethodID(cls,
"foo", "(I)V"); 
env->CallStaticVoidMethod(cls, mid,100);

Sie können einen einfachen C-Wrapper-Code schreiben, um dies für Sie von CTypes aufzurufen. Das Javavm ist jedoch eine Struktur einer Struktur mit einer Reihe von Hohlraumzeigern, sodass es möglicherweise nicht trivial ist, dies direkt zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top