Возможно использовать GCJ для производства библиотеки, вызывая из Python?
Вопрос
Можно ли составить библиотеку, предназначенную для Java с GCJ, получить DLL и вызовать от Python Ctypes?
Я сейчас заинтересован в токсилибах, но если кто -то знает пример игрушки, который будет отличным!
Решение
Если вам нужны крючки Java-Python, вам было бы гораздо лучше использовать Jython, а затем вызовать границу таким образом.
Однако да, можно назвать внешней библиотекой из Java; Но вам не нужно GCJ, чтобы сделать это. Скорее, вы можете просто запустить экземпляр JVM во время выполнения Python, а затем вызовать свой метод (ы) для этого.
По сути, вы хотите создать свою виртуальную машину в Startup, а затем вызовайте свои методы, когда захотите:
// 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-Wrapper, чтобы вызвать это для вас из CTYPE. Тем не менее, Javavm представляет собой структуру структуры с несколькими void-указателями, так что может быть нетривиальным, чтобы сделать это напрямую.