Möglicherweise können Sie GCJ verwenden, um Bibliothek aus Python zu produzieren?
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!
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.
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.