JNI_CreateJavaVM завершает работу приложения C ++ без сообщения об ошибке

Я хочу использовать Voce в приложении C ++. Теперь, в заголовке голоса, более конкретно void init() есть такая часть:

vm_args.nOptions = 2;
// Setup the VM options.
// TODO: check out other options to be used here, like disabling the
// JIT compiler.
JavaVMOption options[2];
// Add the required Java class paths.
std::string classPathString = "-Djava.class.path=";
classPathString += vocePath;
classPathString += "/voce.jar";
char s[1024];
sprintf(s, classPathString.c_str());
options[0].optionString = s;
options[0].extraInfo = NULL;

// Add an option to increase the max heap size. (1)
char x[1024] = "-Xmx256m";
options[1].optionString = x;
options[1].extraInfo = NULL;
//options[1].optionString = "-Djava.compiler=NONE"; // Disable JIT.
//options[1].optionString = "-verbose:gc,class,jni";
vm_args.options = options;
//vm_args.ignoreUnrecognized = JNI_FALSE;

// Create the VM. (2)
status = JNI_CreateJavaVM(&internal::gJVM, (void**)&internal::gEnv, &vm_args);

Если я пытаюсь запустить его таким образом, он вылетает. Если я добавлю все в комментарии после (1), он запустится. После этого, если я просто добавлю JNI_CreateJavaVM в комментарий (2), он также запустится. Если я сразу перейду от сбоя к положению (2) в комментарии, он снова рухнет. Мне нужно пройти путь через (1) и (2), затем просто (2). Однако, так как Voce нуждается в JavaVM, это проблема. По-видимому. Я думаю, что мне нужно некоторое DLL, в данный момент у меня есть jvm.dll в той же папке, что и main.cpp, но не то же самое, что voce.h.

0

Решение

Если вы используете динамическое связывание и загрузку для установленного jvm.dll, это должно работать.

typedef jint(JNICALL *pCreateJavaVM)(JavaVM **, void**, void *);

HINSTANCE hInstance = LoadLibrary(L"C:\\Program Files\\Java\\jre1.8.0_77\\bin\\server\\jvm.dll");
pCreateJavaVM CreateJavaVM = (pCreateJavaVM)GetProcAddress(hInstance, "JNI_CreateJavaVM");

jint res = CreateJavaVM(&vm, (void **)&env, &vm_args);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]