Advertisement
Mr_Dan

JNI for Delhpi: Exception Message

Oct 13th, 2017
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.88 KB | None | 0 0
  1. // ==========================================================
  2. // ====              Created By Nekit111                 ====
  3. // ==========================================================
  4.  
  5. var
  6.  JNI;
  7.  
  8. function Exception (Jnienv: PJNIEnv): PAnsiChar;
  9. var
  10.   err: jthrowable;
  11.   isCopy: JBoolean;
  12.   toString: JMethodID;
  13.   JStr: JString;
  14. begin
  15.   err:= jnienv^.ExceptionOccurred(Jnienv);
  16.   isCopy:= JNI_False;
  17.   toString:= jnienv^.GetMethodID(jnienv, jnienv^.FindClass(jnienv, 'java/lang/Object'), 'toString', '()Ljava/lang/String;');
  18.   JStr:= jnienv^.CallObjectMethod(jnienv, err, toString);
  19.   Result:= jnienv^.GetStringUTFChars(jnienv, JStr, @isCopy);
  20. end;
  21.  
  22. procedure DllMain(dwReason: LongWord);
  23. var
  24.   VmsCount: Integer;
  25.   JVMArray: array of PJavaVM;
  26.   NumberOfVMs: JSize;
  27.   JNIEnv: PJNIEnv;
  28.   GetCreatedJavaVMs: TJNI_GetCreatedJavaVMs;
  29. const
  30.   BufferSize = 256;
  31. begin
  32.   case dwReason of
  33.   DLL_PROCESS_ATTACH:
  34.     begin
  35.         GetCreatedJavaVMs := GetProcAddress(GetModuleHandle('jvm.dll'), 'JNI_GetCreatedJavaVMs');
  36.         SetLength(JVMArray, BufferSize);
  37.         GetCreatedJavaVMs(@JVMArray[0], BufferSize, @NumberOfVMs);
  38.     if NumberOfVMs > 0 then
  39.       begin
  40.         for VmsCount := 0 to NumberOfVMs - 1 do
  41.           begin
  42.             JVMArray[VmsCount]^.GetEnv(JVMArray[VmsCount], @JNIEnv, JNI_VERSION_1_8);
  43.             JVMArray[VMsCount]^.AttachCurrentThread(JVMArray[VmsCount], @JNIEnv, Nil);
  44.             if DefineClass(Jnienv, 'ru/er_log/game/Gamer', 'D:\111\Gamer.class') = NIL then
  45.             Showmessage(Exception(JNIEnv));
  46.             else
  47.             Showmessage('Class is Loaded');
  48.           end;
  49.       end
  50.       else
  51.       begin
  52.         Exit;
  53.       end;
  54.     end;
  55.   DLL_PROCESS_DETACH:
  56.     begin
  57.       exitcode:=noerror;
  58.     end;
  59.   end;
  60. end;
  61.  
  62. begin
  63.   DisableThreadLibraryCalls(hInstance);
  64.   DllProc := @DllMain;
  65.   DllProc(DLL_PROCESS_ATTACH);
  66. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement