Возможно использовать GCJ для производства библиотеки, вызывая из Python?

StackOverflow https://stackoverflow.com/questions/2203728

  •  18-09-2019
  •  | 
  •  

Вопрос

Можно ли составить библиотеку, предназначенную для Java с GCJ, получить DLL и вызовать от Python Ctypes?

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

Это было полезно?

Решение

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

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

JNI Spep

По сути, вы хотите создать свою виртуальную машину в 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-указателями, так что может быть нетривиальным, чтобы сделать это напрямую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top