从 Win32/MFC 应用程序中启用时无法使用 JNI
Unable to use JNI when enabled from within Win32/MFC application
我正在尝试通过 Java 本机接口在 Visual C++ 应用程序中使用 Java 函数,但运气不佳。
我在 CDialog 中的按钮单击处理程序函数中调用代码,我尝试创建 Java VM 实例,我的应用程序抛出访问冲突异常:"Unhandled exception at 0x0F7D260A (mfc120u.dll) in MyApp.exe: 0xC0000005: Access violation reading location 0xFEEEFF26."
但是,当我将代码放入仅包含 main() 函数的框架 C++ 应用程序时,一切正常。
据我所知,我已经在 Visual Studio 2013 年正确设置了我的项目。我在我的 JDK 文件夹中包含了 include 目录中的 jni.h,我正在链接 jvm.lib 包含在我的 JDK lib 文件夹中。我也在使用 JDK 1.8。0_91。
关于它的价值,这里是代码:
JNIEnv *env = NULL;
JavaVM *jvm = NULL;
jint res;
// Initialization arguments
JavaVMInitArgs vm_args;
memset(&vm_args, 0, sizeof(vm_args));
JavaVMOption options[3];
memset(&options, 0, sizeof(options));
options[0].optionString = "-Djava.class.path=C:/";
options[1].optionString = "-Xms128m"; // 128MB initial heap size
options[2].optionString = "-Xmx1g"; // 1GB maximum heap size
vm_args.version = JNI_VERSION_1_8;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
jint status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
任何帮助将不胜感激
最后,我想通了。显然,JNI 在启动时通过设计抛出异常以验证其 运行 所在的环境。请参阅 。
当我在 visual studio 中禁用 Win32 异常中的特定异常时,一切正常。
我正在尝试通过 Java 本机接口在 Visual C++ 应用程序中使用 Java 函数,但运气不佳。
我在 CDialog 中的按钮单击处理程序函数中调用代码,我尝试创建 Java VM 实例,我的应用程序抛出访问冲突异常:"Unhandled exception at 0x0F7D260A (mfc120u.dll) in MyApp.exe: 0xC0000005: Access violation reading location 0xFEEEFF26." 但是,当我将代码放入仅包含 main() 函数的框架 C++ 应用程序时,一切正常。
据我所知,我已经在 Visual Studio 2013 年正确设置了我的项目。我在我的 JDK 文件夹中包含了 include 目录中的 jni.h,我正在链接 jvm.lib 包含在我的 JDK lib 文件夹中。我也在使用 JDK 1.8。0_91。
关于它的价值,这里是代码:
JNIEnv *env = NULL;
JavaVM *jvm = NULL;
jint res;
// Initialization arguments
JavaVMInitArgs vm_args;
memset(&vm_args, 0, sizeof(vm_args));
JavaVMOption options[3];
memset(&options, 0, sizeof(options));
options[0].optionString = "-Djava.class.path=C:/";
options[1].optionString = "-Xms128m"; // 128MB initial heap size
options[2].optionString = "-Xmx1g"; // 1GB maximum heap size
vm_args.version = JNI_VERSION_1_8;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
jint status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
任何帮助将不胜感激
最后,我想通了。显然,JNI 在启动时通过设计抛出异常以验证其 运行 所在的环境。请参阅
当我在 visual studio 中禁用 Win32 异常中的特定异常时,一切正常。