为了账号安全,请及时绑定邮箱和手机立即绑定

将Java嵌入C ++应用程序?

将Java嵌入C ++应用程序?

largeQ 2019-11-29 09:54:36
我得到了一个用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();    }  }}此代码应与Cinema 4D交互以删除所选对象。
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您可以在应用程序中嵌入JVM。Oracle的官方参考书提供了更多详细信息。它的简介是:


#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();

}

如果愿意,您可以做更复杂的事情


查看完整回答
反对 回复 2019-11-29
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

对于您是要将Java嵌入C ++应用程序还是将其嵌入,似乎有些困惑。我会处理每种情况。

  1. 要将Java嵌入到c ++应用程序中,可以对Java程序进行套接字调用。在Java端,您使用SocketServer,在C ++端,您使用常规套接字层库。到目前为止,这是最简单,最可扩展的方法。随着Java工作负载的不断增加,您将继续添加其他jvm。部署有点复杂,但是效果很好。

  2. 用于在Java中嵌入C ++应用程序。这很简单。您将C ++应用程序编译到共享库中,并使用JNI调用它。


查看完整回答
反对 回复 2019-11-29
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

我基本上想要做的是将Java嵌入到此应用程序中。这已经通过Python完成(我没有完成)。


JNI Invocation API支持此功能,如@awoodland所述。这是Java 6/7的当前链接。


我想做的是,使用Java中C ++中的类与应用程序进行交互。在这种情况下,它是一个3D应用程序,称为Cinema 4D。


为此,您可以使用以下之一:


用C实现的Java本机方法

JNA

斯威格

有什么方法可以使用JNI或类似的方法在应用程序运行时(以某种脚本语言)编译和评估Java代码?


您可能会对BeanShell或Groovy等感兴趣。两者都支持在JVM上运行的动态解释的代码。


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信