Не удается загрузить класс из JAR при использовании JNI в 64-битном C ++ - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь загрузить класс, содержащийся в файле 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");

      }

  }

}

...