Nik*_*s R 21 c++ java embed java-native-interface
我得到了一个用C++编写的应用程序,我可以通过在C++中编写插件来扩展应用程序功能.
我基本上想要做的是将Java嵌入到这个应用程序中.这已经用Python完成了(不是由我完成的).
我读了一些关于JNI的内容,但总是有一个使用Java类的完整程序的演讲.
我想要做的是,使用Java中的C++类来与应用程序进行交互.
在这种情况下,它是一个3D应用程序,称为Cinema 4D.
有没有办法在应用程序运行时(使用某种脚本语言)使用JNI或类似的东西编译和评估Java代码?
嵌入完成后的虚构代码示例:
import c4d.documents.*;
class Main {
public static void main() {
BaseDocument doc = GetActiveDocument();
BaseObject op = doc.GetActiveObject();
if (op != null) {
op.Remove();
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码应与Cinema 4D交互以删除所选对象.
Fle*_*exo 43
您可以在应用程序中嵌入JVM.Oracle的官方参考书有更多细节.它的概要是:
Run Code Online (Sandbox Code Playgroud)#include <jni.h> /* where everything is defined */ int main() { JavaVM *jvm; /* denotes a Java VM */ JNIEnv *env; /* pointer to native method interface */ JDK1_1InitArgs vm_args; /* JDK 1.1 VM initialization arguments */ vm_args.version = 0x00010001; /* New in 1.1.2: VM version */ /* Get the default initialization arguments and set the class * path */ JNI_GetDefaultJavaVMInitArgs(&vm_args); vm_args.classpath = ...; /* load and initialize a Java VM, return a JNI interface * pointer in env */ JNI_CreateJavaVM(&jvm, &env, &vm_args); /* invoke the Main.test method using the JNI */ jclass cls = env->FindClass("Main"); jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V"); env->CallStaticVoidMethod(cls, mid, 100); /* We could have created an Object and called methods on it instead */ /* We are done. */ jvm->DestroyJavaVM(); }
如果你想要的话,你可以做更复杂的事情(例如自定义类加载器),但这就是在你的应用程序中使JVM工作所需的最低限度.
| 归档时间: |
|
| 查看次数: |
27062 次 |
| 最近记录: |