我目前正在从事一个项目,从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();
}