如何使用带有C ++ Builder的jni从C ++调用Java

时间:2014-07-18 10:43:12

标签: java c++ c++builder

我目前正在从事一个项目,从C ++调用tika。我已经被阻止使用带有Embarcadero C ++ Builder的jni用C ++调用java方法。我认为JDK提供的jvm.dll 适合与Embarcadero建立连接(由[ilink32 Error] Error: Unresolved external 'JNI_CreateJavaVM' referenced from "path"判断)

我尝试过使用IMPDEF和implib来生成jvm.lib,但是当Embarcadero接受它时,它并没有解决问题。

我认为,如果你使用的是使用COFF目标文件的IDE(Visual Studio),你就不会遇到这个问题(尽管我还没有对此进行验证)。 我真的卡住了;我该如何解决这个问题?

#include <string.h>
#include <stdio.h>
#include <jni.h>

int main() {
  JavaVM *jvm; /* denotes a Java VM */
  JNIEnv *env; /* pointer to native method interface */

  JavaVMInitArgs vm_args;
  JavaVMOption options[1];
  options[0].optionString = "-Djava.class.path=C:\\Users\\Documents\\RA   Studio\\Projects\\DJNI\\HelloWorld.java";
  vm_args.version = JNI_VERSION_1_6;
  vm_args.options = options;
  vm_args.nOptions = 1;
  vm_args.ignoreUnrecognized = JNI_FALSE;

  /* Create the Java VM */
  int res = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args); // this is what it can't find

  /* invoke the Main.test method using the JNI */
  jclass cls = env->FindClass("HelloWorld");
  jmethodID mid = env->GetStaticMethodID(cls, "staticInt", "(I)I");
  env->CallStaticVoidMethod(cls, mid,10);

  /* We are done. */
  jvm->DestroyJavaVM();
}

0 个答案:

没有答案