可以使用GCJ从Python生成可调用的库吗?

时间:2010-02-04 22:30:25

标签: java python ctypes gcj

是否可以使用GCJ编译一个用于Java的库,获取一个dll并从python ctypes调用?

我现在对toxilibs感兴趣,但如果有人知道一个很棒的玩具示例!

1 个答案:

答案 0 :(得分:1)

如果你想要Java-Python钩子,你最好还是使用Jython,然后通过这种方式调用边界。

但是,是的,可以从Java调用外部库;但你不需要GCJ那样做。相反,您可以在Python运行时中调出一个JVM实例,然后为此调用您的方法。

JNI invocation spec

基本上,您希望在启动时创建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-wrapper代码,以便从ctypes中为您调用此代码。但是,JavaVM是一个带有许多void *指针的结构,所以直接做它可能并不重要。