Возможно ли использовать GCJ для создания библиотеки, вызываемой из Python? - PullRequest
4 голосов
/ 05 февраля 2010

Можно ли скомпилировать библиотеку, предназначенную для Java, с помощью GCJ, получить dll и вызвать из python ctypes?

Меня сейчас интересует токсибаланс, но если кто-нибудь знает пример с игрушкой, это было бы здорово!

1 Ответ

1 голос
/ 07 февраля 2010

Если вам нужны хуки Java-Python, вам будет гораздо лучше использовать Jython, а затем вызывать через границу таким образом.

Однако, да, можно вызвать внешнюю библиотеку из Java; но вам не нужен GCJ, чтобы сделать это. Скорее, вы можете просто вызвать экземпляр JVM в вашей среде выполнения Python, а затем вызвать для этого ваши методы.

Спецификация вызова JNI

Обычно вы хотите создать виртуальную машину при запуске, а затем вызывать ваши методы всякий раз, когда захотите:

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

Вы можете написать некоторый простой код C-оболочки, чтобы вызывать его для вас из ctypes. Однако JavaVM - это структура структуры с несколькими указателями void *, поэтому это может быть нетривиальным, если сделать это напрямую.

...