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!

È stato utile?

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.

JNI invocazione spec

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top