Приветствую уважаемых форумчан. Пытаюсь сделать загрузчик для игры, написаной на java. Соответсвенно - для вызова необходимых мне функций из java приложения использую jni.pas:
| Код | procedure TForm1.RunRS; var JavaVM: TJavaVM; JNIEnv: TJNIEnv; Options: array [0..4] of JavaVMOption; VM_args: JavaVMInitArgs; Errcode: Integer; Cls: JClass; Mid: JMethodID; args: jobjectArray; begin JavaVM := TJavaVM.Create(JNI_VERSION_1_6,'C:\Program Files\Java\jre7\bin\client\jvm.dll'); Options[0].optionString := PAnsiChar(Params); VM_args.version := JNI_VERSION_1_6; VM_args.options := @Options; VM_args.nOptions := 1; Errcode := JavaVM.LoadVM(VM_args); if Errcode < 0 then begin
Exit; end; JNIEnv := TJNIEnv.Create(JavaVM.Env); Cls := JNIEnv.FindClass('jagexappletviewer'); if Cls = nil then begin Exit; end; Mid := JNIEnv.GetStaticMethodID(Cls, 'main', '([Ljava/lang/String;)V'); args:= JNIEnv.NewObjectArray(1,JNIEnv.FindClass('java/lang/String'),0); if Mid = nil then begin Exit; end; JNIEnv.SetObjectArrayElement(args,0,JNIEnv.NewStringUTF('runescape.jar')); JNIEnv.CallStaticVoidMethod(Cls, Mid, []); end;
|
Код собирается без ошибок, однако - по непонятной причине выдает: Access violation at address 6BF3D3D5 in MSVCR100.dll, read of address 0000000. jvm.dll - на всякий закинул даже в каталог с программой, все равно ошибка. В чем может быть проблема? PS: по отладчику программа выпадает в функции jni.pas:
| Код | function TJavaVM.LoadVM(const Options: JavaVMInitArgs): JInt; begin if not FIsInitialized then raise EJVMError.Create('JavaVM has not been initialized'); FJavaVMInitArgs := Options; Result := FJNI_CreateJavaVM(@FJavaVM, @FEnv, @FJavaVMInitArgs); end;
|
в строке
| Код | Result := FJNI_CreateJavaVM(@FJavaVM, @FEnv, @FJavaVMInitArgs);
|
. т Файл проекта прилагаю. Заранее извиняюсь за качество кода, но - надо же как-то учиться-) http://rghost.ru/38655741 |