Pregunta

¿Es posible compilar una biblioteca destinada a Java con GCJ, obtener una DLL y llamar desde ctypes pitón?

Me interesa toxilibs por ahora, pero si alguien conoce un ejemplo de juguete que sería grande!

¿Fue útil?

Solución

Si desea ganchos Java Python, sería mucho mejor usar Jython y luego llamar a través del límite de esa manera.

Sin embargo, sí, es posible llamar a una biblioteca externa de Java; pero no es necesario GCJ para hacer eso. Por el contrario, sólo puede abrir una instancia JVM dentro de su tiempo de ejecución Python y luego llamar a su método (s) para eso.

JNI especificación invocación

Básicamente, desea crear la máquina virtual en el inicio, a continuación, invoque el método (s) siempre que lo desee:

// 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);

Se puede escribir algún código simple C-envoltura para invocar este para vosotros desde ctypes. Sin embargo, el JavaVM es una estructura de una estructura con un número de punteros void *, por lo que podría ne no trivial hacerlo directamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top