Possível usar o GCJ para produzir a biblioteca chamada do Python?
Pergunta
É possível compilar uma biblioteca destinada ao Java com o GCJ, obter uma DLL e ligar para o Python Ctypes?
Estou interessado em toxilibs por enquanto, mas se alguém conhece um exemplo de brinquedo, isso seria ótimo!
Solução
Se você deseja ganchos Java-Python, seria muito melhor usar o Jython e depois chamar o limite dessa maneira.
No entanto, sim, é possível chamar uma biblioteca externa da Java; Mas você não precisa do GCJ para fazer isso. Em vez disso, você pode simplesmente exibir uma instância da JVM dentro do seu tempo de execução do Python e, em seguida, invocar seu (s) método (s) para isso.
Basicamente, você deseja criar sua VM na inicialização e invocar seus métodos sempre que quiser:
// 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);
Você pode escrever um código C-Wrapper simples para invocar isso para você da CTYPES. No entanto, o Javavm é uma estrutura de uma estrutura com vários ponteiros vazios*, portanto, pode-se não trivial fazê-lo diretamente.