4

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

我现在对 toxilibs 很感兴趣,但是如果有人知道一个玩具示例,那就太好了!

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 回答