📄 jni.par
字号:
{$ENDIF}
// 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; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
exit: procedure(Code: JInt); {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
abort: procedure; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
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; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
AttachCurrentThread: function(PVM: PJavaVM; PEnv: PPJNIEnv; Args: Pointer): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
DetachCurrentThread: function(PVM: PJavaVM): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
GetEnv: function(PVM: PJavaVM; PEnv: PPointer; Version: JInt): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
end;
{$EXTERNALSYM JNIInvokeInterface_}
// Defined by native libraries.
TJNI_OnLoad = function(PVM: PJavaVM; Reserved: Pointer): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
TJNI_OnUnload = procedure(PVM: PJavaVM; Reserved: Pointer); {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
{$IFDEF DYNAMIC_LINKING}
function JNI_GetDefaultJavaVMInitArgs(Args: PJDK1_1InitArgs; const JVMDLLFile: string): JInt;
{$EXTERNALSYM JNI_GetDefaultJavaVMInitArgs}
function JNI_CreateJavaVM(PJVM: PJavaVM; PEnv: PPointer; Args: Pointer; const JVMDLLFile: string): JInt;
{$EXTERNALSYM JNI_CreateJavaVM}
function JNI_GetCreatedJavaVMs(PJVM: PJavaVM; JSize1: JSize; var JSize2: JSize; const JVMDLLFile: string): JInt;
{$EXTERNALSYM JNI_GetCreatedJavaVMs}
{$ELSE}
function JNI_GetDefaultJavaVMInitArgs(Args: Pointer): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
{$EXTERNALSYM JNI_GetDefaultJavaVMInitArgs}
function JNI_CreateJavaVM(PJVM: PJavaVM; PEnv: PPointer; Args: Pointer): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
{$EXTERNALSYM JNI_CreateJavaVM}
function JNI_GetCreatedJavaVMs(PJVM: PJavaVM; JSize1: JSize; var JSize2: JSize): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
{$EXTERNALSYM JNI_GetCreatedJavaVMs}
{$ENDIF}
// Wrapper stuff
type
TJValueArray = array of JValue;
EJVMError = class(Exception);
EJNIError = class(Exception);
EJNIUnsupportedMethodError = class(EJNIError);
TJNI_GetDefaultJavaVMInitArgs = function(Args: Pointer): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
TJNI_CreateJavaVM = function(PJVM: PJavaVM; PEnv: PPointer; Args: Pointer): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
TJNI_GetCreatedJavaVMs = function(PJVM: PJavaVM; JSize1: JSize; var JSize2: JSize): JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
TJavaVM = class(TObject)
private
FJavaVM: PJavaVM;
FEnv: PJNIEnv;
FJavaVMInitArgs: JavaVMInitArgs;
FJDK1_1InitArgs: JDK1_1InitArgs;
FJVMDLLFile: string;
FVersion: JInt;
{$IFDEF WIN32}
FDLLHandle: THandle;
{$ENDIF}
{$IFDEF LINUX}
FDLLHandle: Pointer;
{$ENDIF}
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -