📄 jni.bor
字号:
// Weak Global References
NewWeakGlobalRef: function(Env: PJNIEnv; Obj: JObject): JWeak; cdecl;
DeleteWeakGlobalRef: procedure(Env: PJNIEnv; Ref: JWeak); cdecl;
// Exceptions
ExceptionCheck: function(Env: PJNIEnv): JBoolean; cdecl;
end;
{$EXTERNALSYM JNINativeInterface_}
// Invocation API
PJavaVMOption = ^JavaVMOption;
JavaVMOption = packed record
optionString: PAnsiChar;
extraInfo: Pointer;
end;
{$EXTERNALSYM JavaVMOption}
PJavaVMInitArgs = ^JavaVMInitArgs;
JavaVMInitArgs = packed record
version: JInt;
nOptions: JInt;
options: PJavaVMOption;
ignoreUnrecognized: JBoolean;
end;
{$EXTERNALSYM JavaVMInitArgs}
PJavaVMAttachArgs = ^JavaVMAttachArgs;
JavaVMAttachArgs = packed record
version: JInt;
name: PAnsiChar;
group: JObject;
end;
{$EXTERNALSYM JavaVMAttachArgs}
// These structures will be VM-specific.
PJDK1_1InitArgs = ^JDK1_1InitArgs;
JDK1_1InitArgs = packed record
version: JInt;
properties: ^PAnsiChar;
checkSource: JInt;
nativeStackSize: JInt;
javaStackSize: JInt;
minHeapSize: JInt;
maxHeapSize: JInt;
verifyMode: JInt;
classpath: PAnsiChar;
vfprintf: function(FP: TIOFile; const Format: PAnsiChar; Args: va_list): JInt; cdecl;
exit: procedure(Code: JInt); cdecl;
abort: procedure; cdecl;
enableClassGC: JInt;
enableVerboseGC: JInt;
disableAsyncGC: JInt;
verbose: JInt;
debugging: JBoolean;
debugPort: JInt;
end;
{$EXTERNALSYM JDK1_1InitArgs}
JDK1_1AttachArgs = packed record
__padding: Pointer;
end;
{$EXTERNALSYM JDK1_1AttachArgs}
// End VM-specific.
JNIInvokeInterface_ = packed record
reserved0: Pointer;
reserved1: Pointer;
reserved2: Pointer;
DestroyJavaVM: function(PVM: PJavaVM): JInt; cdecl;
AttachCurrentThread: function(PVM: PJavaVM; PEnv: PPJNIEnv; Args: Pointer): JInt; cdecl;
DetachCurrentThread: function(PVM: PJavaVM): JInt; cdecl;
GetEnv: function(PVM: PJavaVM; PEnv: PPointer; Version: JInt): JInt; cdecl;
end;
{$EXTERNALSYM JNIInvokeInterface_}
// Defined by native libraries.
TJNI_OnLoad = function(PVM: PJavaVM; Reserved: Pointer): JInt; cdecl;
TJNI_OnUnload = procedure(PVM: PJavaVM; Reserved: Pointer); cdecl;
function JNI_GetDefaultJavaVMInitArgs(Args: Pointer): JInt; cdecl;
{$EXTERNALSYM JNI_GetDefaultJavaVMInitArgs}
function JNI_CreateJavaVM(PJVM: PJavaVM; PEnv: PPointer; Args: Pointer): JInt; cdecl;
{$EXTERNALSYM JNI_CreateJavaVM}
function JNI_GetCreatedJavaVMs(PJVM: PJavaVM; JSize1: JSize; var JSize2: JSize): JInt; cdecl;
{$EXTERNALSYM JNI_GetCreatedJavaVMs}
// Wrapper stuff
type
TJValueArray = array of JValue;
EJVMError = class(Exception);
EJNIError = class(Exception);
EJNIUnsupportedMethodError = class(EJNIError);
TJNI_GetDefaultJavaVMInitArgs = function(Args: Pointer): JInt; cdecl;
TJNI_CreateJavaVM = function(PJVM: PJavaVM; PEnv: PPointer; Args: Pointer): JInt; cdecl;
TJNI_GetCreatedJavaVMs = function(PJVM: PJavaVM; JSize1: JSize; var JSize2: JSize): JInt; cdecl;
TJavaVM = class(TObject)
private
FJavaVM: PJavaVM;
FEnv: PJNIEnv;
FJavaVMInitArgs: JavaVMInitArgs;
FJDK1_1InitArgs: JDK1_1InitArgs;
FJVMDLLFile: string;
FVersion: JInt;
FDLLHandle: Pointer;
FIsInitialized: Boolean;
// DLL functions
FJNI_GetDefaultJavaVMInitArgs: TJNI_GetDefaultJavaVMInitArgs;
FJNI_CreateJavaVM: TJNI_CreateJavaVM;
FJNI_GetCreatedJavaVMs: TJNI_GetCreatedJavaVMs;
procedure SetVersion(const Value: JInt);
public
property JavaVM: PJavaVM read FJavaVM;
property Env: PJNIEnv read FEnv;
property JDK1_1InitArgs: JDK1_1InitArgs read FJDK1_1InitArgs;
property JDK1_2InitArgs: JavaVMInitArgs read FJavaVMInitArgs;
property Version: JInt read FVersion write SetVersion;
// Constructors
constructor Create; overload;
constructor Create(JDKVersion: Integer); overload;
constructor Create(JDKVersion: Integer; const JVMDLLFilename: string); overload;
destructor Destroy; override;
function LoadVM(const Options: JDK1_1InitArgs): JInt; overload;
function LoadVM(const Options: JavaVMInitArgs): JInt; overload;
function GetDefaultJavaVMInitArgs(Args: PJDK1_1InitArgs): JInt;
function GetCreatedJavaVMs(PJVM: PJavaVM; JSize1: JSize; var JSize2: JSize): JInt;
end;
TJNIEnv = class(TObject)
private
FEnv: PJNIEnv;
FMajorVersion: JInt;
FMinorVersion: JInt;
FVersion: JInt;
FConvertedArgs: TJValueArray;
function GetMajorVersion: JInt;
function GetMinorVersion: JInt;
procedure VersionCheck(const FuncName: string; RequiredVersion: JInt);
public
// Properties
property Env: PJNIEnv read FEnv;
property MajorVersion: JInt read FMajorVersion;
property MinorVersion: JInt read FMinorVersion;
property Version: JInt read FVersion;
// Constructors
constructor Create(AEnv: PJNIEnv);
// Support methods
function ArgsToJValues(const Args: array of const): PJValue;
function JStringToString(JStr: JString): string;
function StringToJString(const AString: PAnsiChar): JString;
function UnicodeJStringToString(JStr: JString): string;
function StringToUnicodeJString(const AString: PAnsiChar): JString;
// JNIEnv methods
function GetVersion: JInt;
function DefineClass(const Name: PAnsiChar; Loader: JObject; const Buf: PJByte; Len: JSize): JClass;
function FindClass(const Name: PAnsiChar): JClass;
// Reflection Support
function FromReflectedMethod(Method: JObject): JMethodID;
function FromReflectedField(Field: JObject): JFieldID;
function ToReflectedMethod(AClass: JClass; MethodID: JMethodID; IsStatic: JBoolean): JObject;
function GetSuperclass(Sub: JClass): JClass;
function IsAssignableFrom(Sub: JClass; Sup: JClass): JBoolean;
// Reflection Support
function ToReflectedField(AClass: JClass; FieldID: JFieldID; IsStatic: JBoolean): JObject;
function Throw(Obj: JThrowable): JInt;
function ThrowNew(AClass: JClass; const Msg: PAnsiChar): JInt;
function ExceptionOccurred: JThrowable;
procedure ExceptionDescribe;
procedure ExceptionClear;
procedure FatalError(const Msg: PAnsiChar);
// Local Reference Management
function PushLocalFrame(Capacity: JInt): JInt;
function PopLocalFrame(AResult: JObject): JObject;
function NewGlobalRef(LObj: JObject): JObject;
procedure DeleteGlobalRef(GRef: JObject);
procedure DeleteLocalRef(Obj: JObject);
function IsSameObject(Obj1: JObject; Obj2: JObject): JBoolean;
// Local Reference Management
function NewLocalRef(Ref: JObject): JObject;
function EnsureLocalCapacity(Capacity: JInt): JObject;
function AllocObject(AClass: JClass): JObject;
function NewObject(AClass: JClass; MethodID: JMethodID; const Args: array of const): JObject;
function NewObjectV(AClass: JClass; MethodID: JMethodID; Args: va_list): JObject;
function NewObjectA(AClass: JClass; MethodID: JMethodID; Args: PJValue): JObject;
function GetObjectClass(Obj: JObject): JClass;
function IsInstanceOf(Obj: JObject; AClass: JClass): JBoolean;
function GetMethodID(AClass: JClass; const Name: PAnsiChar; const Sig: PAnsiChar): JMethodID;
function CallObjectMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JObject;
function CallObjectMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JObject;
function CallObjectMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JObject;
function CallBooleanMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JBoolean;
function CallBooleanMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JBoolean;
function CallBooleanMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JBoolean;
function CallByteMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JByte;
function CallByteMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JByte;
function CallByteMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JByte;
function CallCharMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JChar;
function CallCharMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JChar;
function CallCharMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JChar;
function CallShortMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JShort;
function CallShortMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JShort;
function CallShortMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JShort;
function CallIntMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JInt;
function CallIntMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JInt;
function CallIntMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JInt;
function CallLongMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JLong;
function CallLongMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JLong;
function CallLongMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JLong;
function CallFloatMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JFloat;
function CallFloatMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JFloat;
function CallFloatMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JFloat;
function CallDoubleMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const): JDouble;
function CallDoubleMethodV(Obj: JObject; MethodID: JMethodID; Args: va_list): JDouble;
function CallDoubleMethodA(Obj: JObject; MethodID: JMethodID; Args: PJValue): JDouble;
procedure CallVoidMethod(Obj: JObject; MethodID: JMethodID; const Args: array of const);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -