Я пытаюсь загрузить класс, содержащийся в файле JAR, используя JNI на 64-битном C ++, используя V2017.Я могу создать экземпляр JVM, но JNI, похоже, не может найти класс.
Я попытался установить путь к каталогу, содержащему JAR, содержащий класс I 'ищу, а также задаю полный путь к JAR, но это тоже не работает, поэтому буду благодарен за любой совет.
int main()
{
JavaVM *jvm; /* denotes a Java VM */
JNIEnv *env; /* pointer to native method interface */
JavaVMInitArgs vm_args; /* JDK/JRE 8 VM initialization arguments */
JavaVMOption *options = new JavaVMOption[1];
options[0].optionString = (char *)"-Djava.class.path=C:\\AP\\lib\\myjar.jar";
HINSTANCE hinstLib;
std::string result = DetectJavaVM();
hinstLib = LoadLibrary(result.data());
if (hinstLib == 0)
{
printf("Error");
}
if (hinstLib != NULL)
{
typedef jint(JNICALL *PtrCreateJavaVM)(JavaVM **, void **, void *);
typedef jint(JNICALL *PtrGetDefaultJavaVMInitArgs)(void *);
PtrGetDefaultJavaVMInitArgs ptrGetDefaultArgs = (PtrGetDefaultJavaVMInitArgs)GetProcAddress(hinstLib, "JNI_GetDefaultJavaVMInitArgs");
ptrGetDefaultArgs(&vm_args);
vm_args.version = JNI_VERSION_1_8;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = JNI_TRUE;
PtrCreateJavaVM ptrCreateJavaVM = (PtrCreateJavaVM)GetProcAddress(hinstLib, "JNI_CreateJavaVM");
int res = ptrCreateJavaVM(&jvm, (void**)&env, &vm_args);
jclass cls = env->FindClass("org/mypackage/myclass");
jmethodID mid;
if (cls != 0)
{
mid = env->GetStaticMethodID(cls, "intMethod", "(I)I");
}
}
}