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

2024-04-26 03:06:35 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能用GCJ编译一个面向Java的库,从python ctypes获取dll和调用?在

我现在对毒物感兴趣,但是如果有人知道玩具的例子那就太好了!在


Tags: 面向javactypes感兴趣例子dll玩具gcj
1条回答
网友
1楼 · 发布于 2024-04-26 03:06:35

如果您想要JavaPython钩子,那么最好使用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包装器代码,以便从ctypes中为您调用此代码。然而,JavaVM是一个结构的结构,它包含许多void*指针,因此直接执行它可能不是件小事。

相关问题 更多 >