是否可以使用 GCJ 编译用于 Java 的库,获取 dll 并从 python ctypes 调用?
我现在对 toxilibs 很感兴趣,但是如果有人知道一个玩具示例,那就太好了!
如果您想要 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* 指针的结构的结构,因此直接执行此操作可能并非易事。