2013-08-19 56 views
0

我想從C++代碼調用java的東西.. 我鏈接JDK SE 7u25的包括和lib路徑到我的視覺工作室6.0(我只是嘗試它在舊版本的MSVC)。從C++調用java方法的麻煩

JNIEnv* create_vm(JavaVM ** jvm) { 

JNIEnv *env; 
JavaVMInitArgs vm_args; 
JavaVMOption options; 
options.optionString = "-Djava.class.path=C:\\Users\\myName\\Desktop\\Java Src\\TestStruct"; //Path to the java source code 
vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6 
vm_args.nOptions = 1; 
vm_args.options = &options; 
vm_args.ignoreUnrecognized = 0; 

int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args); 
if(ret < 0) 
    printf("\nUnable to Launch JVM\n");  
return env; } 

,我得到以下錯誤...

C:\ PROGRAM FILES \ JAVA \ JDK1.7.0_25 \ LIB \ jvm.lib:致命錯誤LNK1113:無效機器類型

有什麼問題? 我猜JNI_VERSION_1_6可能是問題..?因爲我使用版本SE 1.7.0_25。但我無法找到jni.h文件中的JNI_VERSION_1_7 ..

也許我必須卸載當前的jdk並安裝jdk SE 1.6版本?

感謝您閱讀吧:)

+1

可能是32位與64位的問題。您的Java 32位或64位?您正在製作32位或64位的C++應用程序嗎? – Jesper

回答

0

也許你正試圖庫文件的x64版本的程序的32位鏈接。如果您正在編譯32位exe文件,請確保您使用的是32位JDK。

或者,您可以使用'LoadLibrary'+'GetProcAddress'動態使用'jvm.dll'來調用相應的JNI函數。同樣,你需要關注32/64版本。