从 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 异常中的特定异常时,一切正常。