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!

Foi útil?

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.

JNI Invocation Spec

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top