JNI_CreateJavaVM 終了コード -1と同様の問題がありますか? ただし、私のコードは 32 ビットでコンパイルすると実行されますが、64 ビットでコンパイルすると失敗します。Windows SDK 7.1 プラットフォームを使用して、Visual Studio Express 2010 の構成ごとに JDK の場所を変更しています。私の含まれるものは次のとおりです。
C:\Program Files\Java\jdk1.6.0_29\include; (for jni.h)
C:\Program Files\Java\jdk1.6.0_29\include\win32; (for jni_md.h)
私の追加のライブラリは次のとおりです。
C:\Program Files\Java\jdk1.6.0_29\lib; (for jvm.lib and jawt.lib)
私のソース コードは、C で JVM を初期化しようとしているだけで、コマンド プロンプトが VSC++ で開いたままになるように無限にループしています。
#include "stdafx.h"
#include "jni.h"
JNIEnv* create_vm(JavaVM ** jvm);
int i;
JavaVM* jvm;
JNIEnv * env;
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello World!");
env = create_vm(&jvm);
if (env == 0) { return 7; }
i = 0;
while (1) { i++; }
return 0;
}
JNIEnv* create_vm(JavaVM ** jvm) {
JavaVMInitArgs vm_args;
int ret;
JavaVMOption options;
//Path to the java source code
options.optionString = "-Djava.class.path=H:\\jarpath\\jarfile.jar";
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;
ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args);
if(ret < 0)
printf("\nUnable to Launch JVM\n");
return env;
}
繰り返しますが、これは 32 ビット構成で機能します。唯一の違いは、JDK ルート ディレクトリが 32 ビット フォルダー (つまり、Program Files(x86)) であることです。
印刷後、
Error occurred during initialization of VM
Unable to load native library: Can't find dependent libraries
コードは、VSC++ コンソール ウィンドウに次のエラーを表示して終了します。
The program '[5684] JNI_Test.exe: Native' has exited with code 1 (0x1).
ライブラリや基本的な C コーディングに関して不足しているものはありますか? 私はしばらく C でコードを書いていませんでしたし、そもそもライブラリ全体のリンクにあまり慣れていません。