Possibilità di utilizzo per la produzione di GCJ richiamabile libreria da Python?
Domanda
E 'possibile compilare una libreria destinata per Java con GCJ, ottenere una DLL e chiamare da ctypes Python?
Mi interessa toxilibs per ora, ma se qualcuno conosce un esempio giocattolo che sarebbe grande!
Soluzione
Se si vuole ganci Java-Python, si sarebbe molto meglio utilizzare Jython e quindi chiamando attraverso il confine in quel modo.
Comunque, sì, è possibile chiamare una libreria esterna da Java; ma non è necessario GCJ di farlo. Piuttosto, si può solo aprire un'istanza JVM all'interno del runtime di Python e quindi richiamare il metodo (s) per questo.
In sostanza, si vuole creare il VM in fase di avvio, quindi richiamare il metodo (s) ogni volta che si desidera:
// 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);
Si potrebbe scrivere un semplice codice C-wrapper per invocare questo per voi da ctypes. Tuttavia, il JavaVM è una struttura di una struttura con una serie di puntatori void *, quindi potrebbe Ne non banale per farlo direttamente.