我正在尝试使用 JNI 从 C++ 调用 Java 方法。为此,我已经安装了jdk1.7.0_51
,链接到jdk1.7.0_51\lib\jvm.lib
,包括jdk1.7.0_51\include
和jdk1.7.0_51\include\win32
。在 Visual Studio 2012 中使用以下代码我尝试创建一个 Java vm 对象 - 但该函数始终以退出代码 1 终止我的应用程序(该函数不返回 1:我的程序完全终止并发送退出代码 1)。
#include <iostream>
#include "jni.h"
int main(int argc, char*argv[]){
JNIEnv* env = nullptr;
JavaVM* jvm = nullptr;
JavaVMInitArgs vm_args;
JavaVMOption options[2];
options[0].optionString = "-Djava.class.path=.";
options[1].optionString = "-DXcheck:jni:pedantic";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 2;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE; // remove unrecognized options
int ret = JNI_CreateJavaVM(&jvm, (void**) &env, &vm_args);
std::cout << "This code is never reached" << std::endl;
return 0;
}
操作系统: Windows 7 (x64)
编译器: Visual Studio 2012(x86/Win32 项目)
Java VM: jdk1.7.0_51、i586(在我看来应该没问题,因为我正在为 x86 编译 - 否则与 jvm.lib 的链接将不起作用)
我已经尝试使用两者:jdk1.7.0_51\jre\bin\client\jvm.dll
以及jdk1.7.0_51\jre\bin\Server\jvm.dll
- 具有相同的结果(但我不完全确定有什么区别)。
任何想法和建议将不胜感激。