从Win32/MFC应用程序中启用时无法使用JNI
Unable to use JNI when enabled from within Win32/MFC application
我正试图利用Java Native Interface在Visual C++应用程序中使用Java函数,但运气不佳。
我在CDialog中的按钮点击处理程序函数中调用代码,我甚至试图创建一个Java VM实例,我的应用程序抛出了一个访问违规异常:"MyApp.exe中0x0F7D260A(mfc120u.dll)处的未处理异常:0xC0000005:读取位置0xFEEEF26的访问违规。"然而,当我将代码放入一个只包含main()函数的框架C++应用程序中时,一切都很好。
据我所知,我已经在Visual Studio 2013中正确地设置了我的项目。我将包含JDK文件夹中include目录中的jni.h,并链接JDKlib文件夹中包含的jvm.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在启动时抛出异常是为了验证它运行的环境。请参阅JNI_CreateJavaVM(jvm.dll)中的异常0xC0000005。
当我在visualstudio中禁用Win32异常中的特定异常时,一切都很好。
相关文章:
- 编译时未启用intel oneApi CUDA支持
- 通过JNI传递数据数组的最快方法是什么
- OpenGL在启用深度测试时不会丢弃我的碎片
- Visual C++GC接口如何启用它以及要包含哪个库
- 如何在自定义类中启用'auto loops'?
- 根据某个函数是否存在启用模板
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 启用从"vector<const T>&"到"const vector&"的隐式转换<T>
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 将 C# DLL 导入 C++ 以用于 JNI
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 用C++包装 Java 库 (JNI)
- 如何通过 JNI 将 C 字符串表情符号传递给 Java
- JNI从Android调用C++方法
- JVM 如何执行 JNI
- React Native (Android):无法通过 JNI 在 jobject 中返回字符串
- 在 Eclipse 上启用 C++17 以使用 'std::byte'
- 如何将字符串数组返回到 java JNI
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 从Win32/MFC应用程序中启用时无法使用JNI