📄 jni.bor
字号:
procedure CallVoidMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list);
procedure CallVoidMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue);
function CallNonvirtualObjectMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JObject;
function CallNonvirtualObjectMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JObject;
function CallNonvirtualObjectMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JObject;
function CallNonvirtualBooleanMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JBoolean;
function CallNonvirtualBooleanMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JBoolean;
function CallNonvirtualBooleanMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JBoolean;
function CallNonvirtualByteMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JByte;
function CallNonvirtualByteMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JByte;
function CallNonvirtualByteMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JByte;
function CallNonvirtualCharMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JChar;
function CallNonvirtualCharMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JChar;
function CallNonvirtualCharMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JChar;
function CallNonvirtualShortMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JShort;
function CallNonvirtualShortMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JShort;
function CallNonvirtualShortMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JShort;
function CallNonvirtualIntMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JInt;
function CallNonvirtualIntMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JInt;
function CallNonvirtualIntMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JInt;
function CallNonvirtualLongMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JLong;
function CallNonvirtualLongMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JLong;
function CallNonvirtualLongMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JLong;
function CallNonvirtualFloatMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JFloat;
function CallNonvirtualFloatMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JFloat;
function CallNonvirtualFloatMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JFloat;
function CallNonvirtualDoubleMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const): JDouble;
function CallNonvirtualDoubleMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list): JDouble;
function CallNonvirtualDoubleMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JDouble;
procedure CallNonvirtualVoidMethod(Obj: JObject; AClass: JClass; MethodID: JMethodID; const Args: array of const);
procedure CallNonvirtualVoidMethodV(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: va_list);
procedure CallNonvirtualVoidMethodA(Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue);
function GetFieldID(AClass: JClass; const Name: PAnsiChar; const Sig: PAnsiChar): JFieldID;
function GetObjectField(Obj: JObject; FieldID: JFieldID): JObject;
function GetBooleanField(Obj: JObject; FieldID: JFieldID): JBoolean;
function GetByteField(Obj: JObject; FieldID: JFieldID): JByte;
function GetCharField(Obj: JObject; FieldID: JFieldID): JChar;
function GetShortField(Obj: JObject; FieldID: JFieldID): JShort;
function GetIntField(Obj: JObject; FieldID: JFieldID): JInt;
function GetLongField(Obj: JObject; FieldID: JFieldID): JLong;
function GetFloatField(Obj: JObject; FieldID: JFieldID): JFloat;
function GetDoubleField(Obj: JObject; FieldID: JFieldID): JDouble;
procedure SetObjectField(Obj: JObject; FieldID: JFieldID; Val: JObject);
procedure SetBooleanField(Obj: JObject; FieldID: JFieldID; Val: JBoolean);
procedure SetByteField(Obj: JObject; FieldID: JFieldID; Val: JByte);
procedure SetCharField(Obj: JObject; FieldID: JFieldID; Val: JChar);
procedure SetShortField(Obj: JObject; FieldID: JFieldID; Val: JShort);
procedure SetIntField(Obj: JObject; FieldID: JFieldID; Val: JInt);
procedure SetLongField(Obj: JObject; FieldID: JFieldID; Val: JLong);
procedure SetFloatField(Obj: JObject; FieldID: JFieldID; Val: JFloat);
procedure SetDoubleField(Obj: JObject; FieldID: JFieldID; Val: JDouble);
function GetStaticMethodID(AClass: JClass; const Name: PAnsiChar; const Sig: PAnsiChar): JMethodID;
function CallStaticObjectMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JObject;
function CallStaticObjectMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JObject;
function CallStaticObjectMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JObject;
function CallStaticBooleanMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JBoolean;
function CallStaticBooleanMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JBoolean;
function CallStaticBooleanMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JBoolean;
function CallStaticByteMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JByte;
function CallStaticByteMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JByte;
function CallStaticByteMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JByte;
function CallStaticCharMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JChar;
function CallStaticCharMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JChar;
function CallStaticCharMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JChar;
function CallStaticShortMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JShort;
function CallStaticShortMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JShort;
function CallStaticShortMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JShort;
function CallStaticIntMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JInt;
function CallStaticIntMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JInt;
function CallStaticIntMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JInt;
function CallStaticLongMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JLong;
function CallStaticLongMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JLong;
function CallStaticLongMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JLong;
function CallStaticFloatMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JFloat;
function CallStaticFloatMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JFloat;
function CallStaticFloatMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JFloat;
function CallStaticDoubleMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const): JDouble;
function CallStaticDoubleMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list): JDouble;
function CallStaticDoubleMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JDouble;
procedure CallStaticVoidMethod(AClass: JClass; MethodID: JMethodID; const Args: array of const);
procedure CallStaticVoidMethodV(AClass: JClass; MethodID: JMethodID; Args: va_list);
procedure CallStaticVoidMethodA(AClass: JClass; MethodID: JMethodID; Args: PJValue);
function GetStaticFieldID(AClass: JClass; const Name: PAnsiChar; const Sig: PAnsiChar): JFieldID;
function GetStaticObjectField(AClass: JClass; FieldID: JFieldID): JObject;
function GetStaticBooleanField(AClass: JClass; FieldID: JFieldID): JBoolean;
function GetStaticByteField(AClass: JClass; FieldID: JFieldID): JByte;
function GetStaticCharField(AClass: JClass; FieldID: JFieldID): JChar;
function GetStaticShortField(AClass: JClass; FieldID: JFieldID): JShort;
function GetStaticIntField(AClass: JClass; FieldID: JFieldID): JInt;
function GetStaticLongField(AClass: JClass; FieldID: JFieldID): JLong;
function GetStaticFloatField(AClass: JClass; FieldID: JFieldID): JFloat;
function GetStaticDoubleField(AClass: JClass; FieldID: JFieldID): JDouble;
procedure SetStaticObjectField(AClass: JClass; FieldID: JFieldID; Val: JObject);
procedure SetStaticBooleanField(AClass: JClass; FieldID: JFieldID; Val: JBoolean);
procedure SetStaticByteField(AClass: JClass; FieldID: JFieldID; Val: JByte);
procedure SetStaticCharField(AClass: JClass; FieldID: JFieldID; Val: JChar);
procedure SetStaticShortField(AClass: JClass; FieldID: JFieldID; Val: JShort);
procedure SetStaticIntField(AClass: JClass; FieldID: JFieldID; Val: JInt);
procedure SetStaticLongField(AClass: JClass; FieldID: JFieldID; Val: JLong);
procedure SetStaticFloatField(AClass: JClass; FieldID: JFieldID; Val: JFloat);
procedure SetStaticDoubleField(AClass: JClass; FieldID: JFieldID; Val: JDouble);
function NewString(const Unicode: PJChar; Len: JSize): JString;
function GetStringLength(Str: JString): JSize;
function GetStringChars(Str: JString; var IsCopy: JBoolean): PJChar;
procedure ReleaseStringChars(Str: JString; const Chars: PJChar);
function NewStringUTF(const UTF: PAnsiChar): JString;
function GetStringUTFLength(Str: JString): JSize;
function GetStringUTFChars(Str: JString; var IsCopy: JBoolean): PAnsiChar;
procedure ReleaseStringUTFChars(Str: JString; const Chars: PAnsiChar);
function GetArrayLength(AArray: JArray): JSize;
function NewObjectArray(Len: JSize; AClass: JClass; Init: JObject): JObjectArray;
function GetObjectArrayElement(AArray: JObjectArray; Index: JSize): JObject;
procedure SetObjectArrayElement(AArray: JObjectArray; Index: JSize; Val: JObject);
function NewBooleanArray(Len: JSize): JBooleanArray;
function NewByteArray(Len: JSize): JByteArray;
function NewCharArray(Len: JSize): JCharArray;
function NewShortArray(Len: JSize): JShortArray;
function NewIntArray(Len: JSize): JIntArray;
function NewLongArray(Len: JSize): JLongArray;
function NewFloatArray(Len: JSize): JFloatArray;
function NewDoubleArray(Len: JSize): JDoubleArray;
function GetBooleanArrayElements(AArray: JBooleanArray; var IsCopy: JBoolean): PJBoolean;
function GetByteArrayElements(AArray: JByteArray; var IsCopy: JBoolean): PJByte;
function GetCharArrayElements(AArray: JCharArray; var IsCopy: JBoolean): PJChar;
function GetShortArrayElements(AArray: JShortArray; var IsCopy: JBoolean): PJShort;
function GetIntArrayElements(AArray: JIntArray; var IsCopy: JBoolean): PJInt;
function GetLongArrayElements(AArray: JLongArray; var IsCopy: JBoolean): PJLong;
function GetFloatArrayElements(AArray: JFloatArray; var IsCopy: JBoolean): PJFloat;
function GetDoubleArrayElements(AArray: JDoubleArray; var IsCopy: JBoolean): PJDouble;
procedure ReleaseBooleanArrayElements(AArray: JBooleanArray; Elems: PJBoolean; Mode: JInt);
procedure ReleaseByteArrayElements(AArray: JByteArray; Elems: PJByte; Mode: JInt);
procedure ReleaseCharArrayElements(AArray: JCharArray; Elems: PJChar; Mode: JInt);
procedure ReleaseShortArrayElements(AArray: JShortArray; Elems: PJShort; Mode: JInt);
procedure ReleaseIntArrayElements(AArray: JIntArray; Elems: PJInt; Mode: JInt);
procedure ReleaseLongArrayElements(AArray: JLongArray; Elems: PJLong; Mode: JInt);
procedure ReleaseFloatArrayElements(AArray: JFloatArray; Elems: PJFloat; Mode: JInt);
procedure ReleaseDoubleArrayElements(AArray: JDoubleArray; Elems: PJDouble; Mode: JInt);
procedure GetBooleanArrayRegion(AArray: JBooleanArray; Start: JSize; Len: JSize; Buf: PJBoolean);
procedure GetByteArrayRegion(AArray: JByteArray; Start: JSize; Len: JSize; Buf: PJByte);
procedure GetCharArrayRegion(AArray: JCharArray; Start: JSize; Len: JSize; Buf: PJChar);
procedure GetShortArrayRegion(AArray: JShortArray; Start: JSize; Len: JSize; Buf: PJShort);
procedure GetIntArrayRegion(AArray: JIntArray; Start: JSize; Len: JSize; Buf: PJInt);
procedure GetLongArrayRegion(AArray: JLongArray; Start: JSize; Len: JSize; Buf: PJLong);
procedure GetFloatArrayRegion(AArray: JFloatArray; Start: JSize; Len: JSize; Buf: PJFloat);
procedure GetDoubleArrayRegion(AArray: JDoubleArray; Start: JSize; Len: JSize; Buf: PJDouble);
procedure SetBooleanArrayRegion(AArray: JBooleanArray; Start: JSize; Len: JSize; Buf: PJBoolean);
procedure SetByteArrayRegion(AArray: JByteArray; Start: JSize; Len: JSize; Buf: PJByte);
procedure SetCharArrayRegion(AArray: JCharArray; Start: JSize; Len: JSize; Buf: PJChar);
procedure SetShortArrayRegion(AArray: JShortArray; Start: JSize; Len: JSize; Buf: PJShort);
procedure SetIntArrayRegion(AArray: JIntArray; Start: JSize; Len: JSize; Buf: PJInt);
procedure SetLongArrayRegion(AArray: JLongArray; Start: JSize; Len: JSize; Buf: PJLong);
procedure SetFloatArrayRegion(AArray: JFloatArray; Start: JSize; Len: JSize; Buf: PJFloat);
procedure SetDoubleArrayRegion(AArray: JDoubleArray; Start: JSize; Len: JSize; Buf: PJDouble);
function RegisterNatives(AClass: JClass; const Methods: PJNINativeMethod; NMethods: JInt): JInt;
function UnregisterNatives(AClass: JClass): JInt;
function MonitorEnter(Obj: JObject): JInt;
function MonitorExit(Obj: JObject): JInt;
function GetJavaVM(var VM: JavaVM): JInt;
// String Operations
procedure GetStringRegion(Str: JString; Start: JSize; Len: JSize; Buf: PJChar);
procedure GetStringUTFRegion(Str: JString; Start: JSize; Len: JSize; Buf: PAnsiChar);
// Array Operations
function GetPrimitiveArrayCritical(AArray: JArray; var IsCopy: JBoolean): Pointer;
procedure ReleasePrimitiveArrayCritical(AArray: JArray; CArray: Pointer; Mode: JInt);
// String Operations
function GetStringCritical(Str: JString; var IsCopy: JBoolean): PJChar;
procedure ReleaseStringCritical(Str: JString; CString: PJChar);
// Weak Global References
function NewWeakGlobalRef(Obj: JObject): JWeak;
procedure DeleteWeakGlobalRef(Ref: JWeak);
// Exceptions
function ExceptionCheck: JBoolean;
end;
implementation
const
JvmModuleName = 'libjvm.so';
function JNI_CreateJavaVM; external JvmModuleName name 'JNI_CreateJavaVM';
function JNI_GetDefaultJavaVMInitArgs; external JvmModuleName name 'JNI_GetDefaultJavaVMInitArgs';
function JNI_GetCreatedJavaVMs; external JvmModuleName name 'JNI_GetCreatedJavaVMs';
function TJNIEnv.ArgsToJValues(const Args: array of const): PJValue;
var
I: Integer;
begin
if Length(Args) <> Length(FConvertedArgs) then
SetLength(FConvertedArgs, Length(Args));
for I := 0 to High(Args) do
case Args[I].VType of
vtInteger:
FConvertedArgs[I].i := Args[I].VInteger;
vtBoolean:
FConvertedArgs[I].z := Args[I].VBoolean;
vtWideChar:
FConvertedArgs[I].c := Args[I].VWideChar;
vtInt64:
FConvertedArgs[I].j := Args[I].VInt64^;
vtPointer, vtObject:
FConvertedArgs[I].l := JObject(Args[I].VObject);
vtAnsiString:
FConvertedArgs[I].l := StringToJString(Args[I].VAnsiString);
vtExtended:
FConvertedArgs[I].d := Args[I].VExtended^; // Extended to Double (we lose Floats here)
else
raise EJNIError.Create('Unsupported variant argument');
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -