من الممكن استخدام GCJ لإنتاج مكتبة Callable من بيثون؟
سؤال
هل من الممكن تجميع مكتبة مخصصة ل Java مع GCJ، واحصل على DLL والاتصال من Python CtyPes؟
أنا مهتم ب Toxilibs في الوقت الحالي، لكن إذا كان أي شخص يعرف مثالا لعبة سيكون رائعا!
المحلول
إذا كنت تريد خطافات Java-Python، فستكون أفضل حالا في استخدام Jython ثم استدعاء الحدود بهذه الطريقة.
ومع ذلك، نعم، من الممكن استدعاء مكتبة خارجية من جافا؛ لكنك لا تحتاج إلى GCJ للقيام بذلك. بدلا من ذلك، يمكنك فقط طرح مثيل JVM داخل وقت تشغيل Python الخاص بك ثم استدعاء الأسلوب (الأسلوب) الخاص بك لذلك.
أساسا، تريد إنشاء 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);
يمكنك كتابة بعض Code C-Wrapper بسيطة لاستدعاء هذا لك من CTTYPES. ومع ذلك، فإن Javavm هي هيكل بنية ذات عدد من مؤشرات الفراغ *، لذلك قد لا تكون غير تافهة للقيام بذلك مباشرة.