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);
簡単な C ラッパー コードを記述して、ctypes からこれを呼び出すことができます。ただし、JavaVM は多数の void* ポインターを持つ構造体の構造であるため、直接実行することは自明ではありません。