GCJを使用してPythonから呼び出すライブラリを作成することができますか?
質問
GCJを使用してJavaを対象としたライブラリをコンパイルし、DLLを取得してPython CTYPESから電話をかけることは可能ですか?
私は今のところトキシリブに興味がありますが、誰かがおもちゃの例を知っているなら、それは素晴らしいことです!
解決
Java-Pythonフックが必要な場合は、Jythonを使用して、そのように境界を越えて呼び出す方がはるかに良いでしょう。
ただし、はい、Javaから外部ライブラリを呼び出すことができます。しかし、それを行うためにGCJは必要ありません。むしろ、Pythonランタイム内にJVMインスタンスを表示して、そのためにメソッドを呼び出すだけです。
基本的に、スタートアップでVMを作成してから、いつでもメソッドを呼び出します。
// 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);
CTYPESからこれを呼び出すために、いくつかの簡単なCラッパーコードを記述できます。ただし、Javavmは多くのボイド*ポインターを備えた構造の構造であるため、直接それを行うことは非自明かもしれません。
所属していません StackOverflow