【问题标题】:How to use JNI to start JVM in builder C++ application如何使用 JNI 在 builder C++ 应用程序中启动 JVM
【发布时间】:2014-10-22 07:26:13
【问题描述】:

所以我需要使用 jni 来调用 java 方法。 我从这段代码开始:

JNIEnv *env1;
JavaVM**  jvm1;
JavaVMInitArgs vm_args1;
JavaVMOption options1[1];
options1[0].optionString = "-Djava.class.path=D:\\Java Src\\TestStruct"; //Path to the java source code
vm_args1.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6
vm_args1.nOptions = 1;
vm_args1.options = options1;
vm_args1.ignoreUnrecognized = 0;

int reAt = JNI_CreateJavaVM(jvm1, (void**)&env1, &vm_args1);
if(reAt < 0)
    Label1->Caption = "failed";
else
    Label1->Caption = "Success";

我将 jvm.lib 转换为 OMF lib,以便在我的构建器 C++ 应用程序中使用:

 COFF2OMF jvm.lib jvm2.lib

我将 jvm2.lib 添加到库路径以修复有关 JNI_CreateJavaVM 函数的链接错误。

现在我的应用程序编译没有错误。

但调用 JNI_CreateJavaVM 函数时会崩溃。

我在 .exe 附近添加了 jvm.dll

步骤中的pb是什么??

如何解决?

谢谢

【问题讨论】:

标签: java c++ jvm java-native-interface c++builder


【解决方案1】:

JNI_CreateJavaVM 的第一个参数应该是指向JavaVM* 的有效指针:

JavaVM* jvm1;
int reAt = JNI_CreateJavaVM(&jvm1, ...);

在您的示例中,jvm1 未初始化。

详情请咨询the documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2023-02-25
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多