如何使用JNI在builder C ++应用程序中启动JVM [英] How to use JNI to start JVM in builder C++ application

查看:180
本文介绍了如何使用JNI在builder C ++应用程序中启动JVM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  JNIEnv * env1; 
JavaVM ** jvm1;
JavaVMInitArgs vm_args1;
JavaVMOption options1 [1];
options1 [0] .optionString =-Djava.class.path = D:\\Java Src\\\TestStruct; // java源代码的路径
vm_args1.version = JNI_VERSION_1_6; // JDK版本。这表示版本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

$ b



如何修复它?



Thx

解决方案

JNI_CreateJavaVM 的第一个参数应为有效的指针 JavaVM *

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

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



请参阅文档


So i need to use jni to call java method. i started with this code :

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";

I convert jvm.lib to OMF lib for to use in my builder C++ Application :

 COFF2OMF jvm.lib jvm2.lib

I added jvm2.lib to the library path to fixe link error about JNI_CreateJavaVM function.

Now my application compile without error.

But it crash when it call JNI_CreateJavaVM function.

I added the jvm.dll near my .exe

What is the pb in there steps??

How can fixe it?

Thx

解决方案

The first argument to JNI_CreateJavaVM should be a valid pointer to JavaVM*:

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

In your example, jvm1 is uninitialized.

Consult the documentation for details.

这篇关于如何使用JNI在builder C ++应用程序中启动JVM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆