4

GCJを使用してJava用のライブラリをコンパイルし、dllを取得して、Python ctypesから呼び出すことは可能ですか?

今のところトキシリブに興味がありますが、おもちゃの例を知っている人がいたら、それは素晴らしいことです!

4

1 に答える 1

1

Java-Python フックが必要な場合は、Jython を使用してから、そのように境界を越えて呼び出す方がはるかに優れています。

ただし、はい、Java から外部ライブラリを呼び出すことは可能です。しかし、それを行うために GCJ は必要ありません。むしろ、Python ランタイム内で JVM インスタンスを起動し、そのメソッドを呼び出すことができます。

JNI 呼び出し仕様

基本的に、起動時に 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* ポインターを持つ構造体の構造であるため、直接実行することは自明ではありません。

于 2010-02-07T18:18:11.580 に答える