source: trunk/Packages/uos/uos_jni.pas

Last change on this file was 664, checked in by chronos, 3 days ago
  • Added: Ability to play music in background in start screen and in-game. Used uos as audio library.
  • Property svn:executable set to *
File size: 29.8 KB
Line 
1unit uos_jni;
2
3{$ifdef fpc}
4{$mode delphi}
5 {$packrecords c}
6{$endif}
7
8{$macro on}
9{$ifdef mswindows}
10{$define jnicall:=stdcall}
11{$else}
12{$define jnicall:=cdecl}
13{$endif}
14
15interface
16
17(*
18 * Manifest constants.
19 *)
20const JNI_FALSE=0;
21 JNI_TRUE=1;
22
23 JNI_VERSION_1_1=$00010001;
24 JNI_VERSION_1_2=$00010002;
25 JNI_VERSION_1_4=$00010004;
26 JNI_VERSION_1_6=$00010006;
27
28 JNI_OK=0; // no error
29 JNI_ERR=-1; // generic error
30 JNI_EDETACHED=-2; // thread detached from the VM
31 JNI_EVERSION=-3; // JNI version error
32
33 JNI_COMMIT=1; // copy content, do not free buffer
34 JNI_ABORT=2; // free buffer w/o copying back
35
36(*
37 * Type definitions.
38 *)
39type va_list=pointer;
40
41 jboolean=byte; // unsigned 8 bits
42 jbyte=shortint; // signed 8 bits
43 jchar=word; // unsigned 16 bits
44 jshort=smallint; // signed 16 bits
45 jint=longint; // signed 32 bits
46 jlong=int64; // signed 64 bits
47 jfloat=single; // 32-bit IEEE 754
48 jdouble=double; // 64-bit IEEE 754
49
50 jsize=jint; // "cardinal indices and sizes"
51
52 Pjboolean=^jboolean;
53 Pjbyte=^jbyte;
54 Pjchar=^jchar;
55 Pjshort=^jshort;
56 Pjint=^jint;
57 Pjlong=^jlong;
58 Pjfloat=^jfloat;
59 Pjdouble=^jdouble;
60
61 Pjsize=^jsize;
62
63 // Reference type
64 jobject=pointer;
65 jclass=jobject;
66 jstring=jobject;
67 jarray=jobject;
68 jobjectArray=jarray;
69 jbooleanArray=jarray;
70 jbyteArray=jarray;
71 jcharArray=jarray;
72 jshortArray=jarray;
73 jintArray=jarray;
74 jlongArray=jarray;
75 jfloatArray=jarray;
76 jdoubleArray=jarray;
77 jthrowable=jobject;
78 jweak=jobject;
79 jref=jobject;
80
81 PPointer=^pointer;
82 Pjobject=^jobject;
83 Pjclass=^jclass;
84 Pjstring=^jstring;
85 Pjarray=^jarray;
86 PjobjectArray=^jobjectArray;
87 PjbooleanArray=^jbooleanArray;
88 PjbyteArray=^jbyteArray;
89 PjcharArray=^jcharArray;
90 PjshortArray=^jshortArray;
91 PjintArray=^jintArray;
92 PjlongArray=^jlongArray;
93 PjfloatArray=^jfloatArray;
94 PjdoubleArray=^jdoubleArray;
95 Pjthrowable=^jthrowable;
96 Pjweak=^jweak;
97 Pjref=^jref;
98
99 _jfieldID=record // opaque structure
100 end;
101 jfieldID=^_jfieldID;// field IDs
102 PjfieldID=^jfieldID;
103
104 _jmethodID=record // opaque structure
105 end;
106 jmethodID=^_jmethodID;// method IDs
107 PjmethodID=^jmethodID;
108
109 PJNIInvokeInterface=^JNIInvokeInterface;
110
111 Pjvalue=^jvalue;
112 jvalue={$ifdef packedrecords}packed{$endif} record
113 case integer of
114 0:(z:jboolean);
115 1:(b:jbyte);
116 2:(c:jchar);
117 3:(s:jshort);
118 4:(i:jint);
119 5:(j:jlong);
120 6:(f:jfloat);
121 7:(d:jdouble);
122 8:(l:jobject);
123 end;
124
125 jobjectRefType=(
126 JNIInvalidRefType=0,
127 JNILocalRefType=1,
128 JNIGlobalRefType=2,
129 JNIWeakGlobalRefType=3);
130
131 PJNINativeMethod=^JNINativeMethod;
132 JNINativeMethod={$ifdef packedrecords}packed{$endif} record
133 name:pchar;
134 signature:pchar;
135 fnPtr:pointer;
136 end;
137
138 PJNINativeInterface=^JNINativeInterface;
139
140 _JNIEnv={$ifdef packedrecords}packed{$endif} record
141 functions:PJNINativeInterface;
142 end;
143
144 _JavaVM={$ifdef packedrecords}packed{$endif} record
145 functions:PJNIInvokeInterface;
146 end;
147
148 C_JNIEnv=^JNINativeInterface;
149 JNIEnv=^JNINativeInterface;
150 JavaVM=^JNIInvokeInterface;
151
152 PPJNIEnv=^PJNIEnv;
153 PJNIEnv=^JNIEnv;
154
155 PPJavaVM=^PJavaVM;
156 PJavaVM=^JavaVM;
157
158 JNINativeInterface={$ifdef packedrecords}packed{$endif} record
159 reserved0:pointer;
160 reserved1:pointer;
161 reserved2:pointer;
162 reserved3:pointer;
163
164 GetVersion:function(Env:PJNIEnv):JInt; jnicall;
165 DefineClass:function(Env:PJNIEnv;const Name:pchar;Loader:JObject;const Buf:PJByte;Len:JSize):JClass; jnicall;
166 FindClass:function(Env:PJNIEnv;const Name:pchar):JClass; jnicall;
167
168 // Reflection Support
169 FromReflectedMethod:function(Env:PJNIEnv;Method:JObject):JMethodID; jnicall;
170 FromReflectedField:function(Env:PJNIEnv;Field:JObject):JFieldID; jnicall;
171 ToReflectedMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;IsStatic:JBoolean):JObject; jnicall;
172
173 GetSuperclass:function(Env:PJNIEnv;Sub:JClass):JClass; jnicall;
174 IsAssignableFrom:function(Env:PJNIEnv;Sub:JClass;Sup:JClass):JBoolean; jnicall;
175
176 // Reflection Support
177 ToReflectedField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;IsStatic:JBoolean):JObject; jnicall;
178
179 Throw:function(Env:PJNIEnv;Obj:JThrowable):JInt; jnicall;
180 ThrowNew:function(Env:PJNIEnv;AClass:JClass;const Msg:pchar):JInt; jnicall;
181 ExceptionOccurred:function(Env:PJNIEnv):JThrowable; jnicall;
182 ExceptionDescribe:procedure(Env:PJNIEnv); jnicall;
183 ExceptionClear:procedure(Env:PJNIEnv); jnicall;
184 FatalError:procedure(Env:PJNIEnv;const Msg:pchar); jnicall;
185
186 // Local Reference Management
187 PushLocalFrame:function(Env:PJNIEnv;Capacity:JInt):JInt; jnicall;
188 PopLocalFrame:function(Env:PJNIEnv;Result:JObject):JObject; jnicall;
189
190 NewGlobalRef:function(Env:PJNIEnv;LObj:JObject):JObject; jnicall;
191 DeleteGlobalRef:procedure(Env:PJNIEnv;GRef:JObject); jnicall;
192 DeleteLocalRef:procedure(Env:PJNIEnv;Obj:JObject); jnicall;
193 IsSameObject:function(Env:PJNIEnv;Obj1:JObject;Obj2:JObject):JBoolean; jnicall;
194
195 // Local Reference Management
196 NewLocalRef:function(Env:PJNIEnv;Ref:JObject):JObject; jnicall;
197 EnsureLocalCapacity:function(Env:PJNIEnv;Capacity:JInt):JObject; jnicall;
198
199 AllocObject:function(Env:PJNIEnv;AClass:JClass):JObject; jnicall;
200 NewObject:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JObject; jnicall;
201 NewObjectV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JObject; jnicall;
202 NewObjectA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JObject; jnicall;
203
204 GetObjectClass:function(Env:PJNIEnv;Obj:JObject):JClass; jnicall;
205 IsInstanceOf:function(Env:PJNIEnv;Obj:JObject;AClass:JClass):JBoolean; jnicall;
206
207 GetMethodID:function(Env:PJNIEnv;AClass:JClass;const Name:pchar;const Sig:pchar):JMethodID; jnicall;
208
209 CallObjectMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JObject; jnicall;
210 CallObjectMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JObject; jnicall;
211 CallObjectMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JObject; jnicall;
212
213 CallBooleanMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JBoolean; jnicall;
214 CallBooleanMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JBoolean; jnicall;
215 CallBooleanMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JBoolean; jnicall;
216
217 CallByteMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JByte; jnicall;
218 CallByteMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JByte; jnicall;
219 CallByteMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JByte; jnicall;
220
221 CallCharMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JChar; jnicall;
222 CallCharMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JChar; jnicall;
223 CallCharMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JChar; jnicall;
224
225 CallShortMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JShort; jnicall;
226 CallShortMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JShort; jnicall;
227 CallShortMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JShort; jnicall;
228
229 CallIntMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JInt; jnicall;
230 CallIntMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JInt; jnicall;
231 CallIntMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JInt; jnicall;
232
233 CallLongMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JLong; jnicall;
234 CallLongMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JLong; jnicall;
235 CallLongMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JLong; jnicall;
236
237 CallFloatMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JFloat; jnicall;
238 CallFloatMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JFloat; jnicall;
239 CallFloatMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JFloat; jnicall;
240
241 CallDoubleMethod:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID):JDouble; jnicall;
242 CallDoubleMethodV:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list):JDouble; jnicall;
243 CallDoubleMethodA:function(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue):JDouble; jnicall;
244
245 CallVoidMethod:procedure(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID); jnicall;
246 CallVoidMethodV:procedure(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:va_list); jnicall;
247 CallVoidMethodA:procedure(Env:PJNIEnv;Obj:JObject;MethodID:JMethodID;Args:PJValue); jnicall;
248
249 CallNonvirtualObjectMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JObject; jnicall;
250 CallNonvirtualObjectMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JObject; jnicall;
251 CallNonvirtualObjectMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JObject; jnicall;
252
253 CallNonvirtualBooleanMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JBoolean; jnicall;
254 CallNonvirtualBooleanMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JBoolean; jnicall;
255 CallNonvirtualBooleanMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JBoolean; jnicall;
256
257 CallNonvirtualByteMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JByte; jnicall;
258 CallNonvirtualByteMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JByte; jnicall;
259 CallNonvirtualByteMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JByte; jnicall;
260
261 CallNonvirtualCharMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JChar; jnicall;
262 CallNonvirtualCharMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JChar; jnicall;
263 CallNonvirtualCharMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JChar; jnicall;
264
265 CallNonvirtualShortMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JShort; jnicall;
266 CallNonvirtualShortMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JShort; jnicall;
267 CallNonvirtualShortMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JShort; jnicall;
268
269 CallNonvirtualIntMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JInt; jnicall;
270 CallNonvirtualIntMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JInt; jnicall;
271 CallNonvirtualIntMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JInt; jnicall;
272
273 CallNonvirtualLongMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JLong; jnicall;
274 CallNonvirtualLongMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JLong; jnicall;
275 CallNonvirtualLongMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JLong; jnicall;
276
277 CallNonvirtualFloatMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JFloat; jnicall;
278 CallNonvirtualFloatMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JFloat; jnicall;
279 CallNonvirtualFloatMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JFloat; jnicall;
280
281 CallNonvirtualDoubleMethod:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID):JDouble; jnicall;
282 CallNonvirtualDoubleMethodV:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list):JDouble; jnicall;
283 CallNonvirtualDoubleMethodA:function(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue):JDouble; jnicall;
284
285 CallNonvirtualVoidMethod:procedure(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID); jnicall;
286 CallNonvirtualVoidMethodV:procedure(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:va_list); jnicall;
287 CallNonvirtualVoidMethodA:procedure(Env:PJNIEnv;Obj:JObject;AClass:JClass;MethodID:JMethodID;Args:PJValue); jnicall;
288
289 GetFieldID:function(Env:PJNIEnv;AClass:JClass;const Name:pchar;const Sig:pchar):JFieldID; jnicall;
290
291 GetObjectField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JObject; jnicall;
292 GetBooleanField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JBoolean; jnicall;
293 GetByteField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JByte; jnicall;
294 GetCharField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JChar; jnicall;
295 GetShortField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JShort; jnicall;
296 GetIntField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JInt; jnicall;
297 GetLongField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JLong; jnicall;
298 GetFloatField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JFloat; jnicall;
299 GetDoubleField:function(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID):JDouble; jnicall;
300
301 SetObjectField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JObject); jnicall;
302 SetBooleanField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JBoolean); jnicall;
303 SetByteField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JByte); jnicall;
304 SetCharField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JChar); jnicall;
305 SetShortField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JShort); jnicall;
306 SetIntField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JInt); jnicall;
307 SetLongField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JLong); jnicall;
308 SetFloatField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JFloat); jnicall;
309 SetDoubleField:procedure(Env:PJNIEnv;Obj:JObject;FieldID:JFieldID;Val:JDouble); jnicall;
310
311 GetStaticMethodID:function(Env:PJNIEnv;AClass:JClass;const Name:pchar;const Sig:pchar):JMethodID; jnicall;
312
313 CallStaticObjectMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JObject; jnicall;
314 CallStaticObjectMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JObject; jnicall;
315 CallStaticObjectMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JObject; jnicall;
316
317 CallStaticBooleanMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JBoolean; jnicall;
318 CallStaticBooleanMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JBoolean; jnicall;
319 CallStaticBooleanMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JBoolean; jnicall;
320
321 CallStaticByteMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JByte; jnicall;
322 CallStaticByteMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JByte; jnicall;
323 CallStaticByteMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JByte; jnicall;
324
325 CallStaticCharMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JChar; jnicall;
326 CallStaticCharMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JChar; jnicall;
327 CallStaticCharMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JChar; jnicall;
328
329 CallStaticShortMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JShort; jnicall;
330 CallStaticShortMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JShort; jnicall;
331 CallStaticShortMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JShort; jnicall;
332
333 CallStaticIntMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JInt; jnicall;
334 CallStaticIntMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JInt; jnicall;
335 CallStaticIntMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JInt; jnicall;
336
337 CallStaticLongMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JLong; jnicall;
338 CallStaticLongMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JLong; jnicall;
339 CallStaticLongMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JLong; jnicall;
340
341 CallStaticFloatMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JFloat; jnicall;
342 CallStaticFloatMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JFloat; jnicall;
343 CallStaticFloatMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JFloat; jnicall;
344
345 CallStaticDoubleMethod:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID):JDouble; jnicall;
346 CallStaticDoubleMethodV:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list):JDouble; jnicall;
347 CallStaticDoubleMethodA:function(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue):JDouble; jnicall;
348
349 CallStaticVoidMethod:procedure(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID); jnicall;
350 CallStaticVoidMethodV:procedure(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:va_list); jnicall;
351 CallStaticVoidMethodA:procedure(Env:PJNIEnv;AClass:JClass;MethodID:JMethodID;Args:PJValue); jnicall;
352
353 GetStaticFieldID:function(Env:PJNIEnv;AClass:JClass;const Name:pchar;const Sig:pchar):JFieldID; jnicall;
354 GetStaticObjectField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JObject; jnicall;
355 GetStaticBooleanField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JBoolean; jnicall;
356 GetStaticByteField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JByte; jnicall;
357 GetStaticCharField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JChar; jnicall;
358 GetStaticShortField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JShort; jnicall;
359 GetStaticIntField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JInt; jnicall;
360 GetStaticLongField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JLong; jnicall;
361 GetStaticFloatField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JFloat; jnicall;
362 GetStaticDoubleField:function(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID):JDouble; jnicall;
363
364 SetStaticObjectField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JObject); jnicall;
365 SetStaticBooleanField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JBoolean); jnicall;
366 SetStaticByteField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JByte); jnicall;
367 SetStaticCharField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JChar); jnicall;
368 SetStaticShortField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JShort); jnicall;
369 SetStaticIntField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JInt); jnicall;
370 SetStaticLongField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JLong); jnicall;
371 SetStaticFloatField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JFloat); jnicall;
372 SetStaticDoubleField:procedure(Env:PJNIEnv;AClass:JClass;FieldID:JFieldID;Val:JDouble); jnicall;
373
374 NewString:function(Env:PJNIEnv;const Unicode:PJChar;Len:JSize):JString; jnicall;
375 GetStringLength:function(Env:PJNIEnv;Str:JString):JSize; jnicall;
376 GetStringChars:function(Env:PJNIEnv;Str:JString;IsCopy:PJBoolean):PJChar; jnicall;
377 ReleaseStringChars:procedure(Env:PJNIEnv;Str:JString;const Chars:PJChar); jnicall;
378
379 NewStringUTF:function(Env:PJNIEnv;const UTF:pchar):JString; jnicall;
380 GetStringUTFLength:function(Env:PJNIEnv;Str:JString):JSize; jnicall;
381 GetStringUTFChars:function(Env:PJNIEnv;Str:JString;IsCopy:PJBoolean):pchar; jnicall;
382 ReleaseStringUTFChars:procedure(Env:PJNIEnv;Str:JString;const Chars:pchar); jnicall;
383
384 GetArrayLength:function(Env:PJNIEnv;AArray:JArray):JSize; jnicall;
385
386 NewObjectArray:function(Env:PJNIEnv;Len:JSize;AClass:JClass;Init:JObject):JObjectArray; jnicall;
387 GetObjectArrayElement:function(Env:PJNIEnv;AArray:JObjectArray;Index:JSize):JObject; jnicall;
388 SetObjectArrayElement:procedure(Env:PJNIEnv;AArray:JObjectArray;Index:JSize;Val:JObject); jnicall;
389
390 NewBooleanArray:function(Env:PJNIEnv;Len:JSize):JBooleanArray; jnicall;
391 NewByteArray:function(Env:PJNIEnv;Len:JSize):JByteArray; jnicall;
392 NewCharArray:function(Env:PJNIEnv;Len:JSize):JCharArray; jnicall;
393 NewShortArray:function(Env:PJNIEnv;Len:JSize):JShortArray; jnicall;
394 NewIntArray:function(Env:PJNIEnv;Len:JSize):JIntArray; jnicall;
395 NewLongArray:function(Env:PJNIEnv;Len:JSize):JLongArray; jnicall;
396 NewFloatArray:function(Env:PJNIEnv;Len:JSize):JFloatArray; jnicall;
397 NewDoubleArray:function(Env:PJNIEnv;Len:JSize):JDoubleArray; jnicall;
398
399 GetBooleanArrayElements:function(Env:PJNIEnv;AArray:JBooleanArray;IsCopy:PJBoolean):PJBoolean; jnicall;
400 GetByteArrayElements:function(Env:PJNIEnv;AArray:JByteArray;IsCopy:PJBoolean):PJByte; jnicall;
401 GetCharArrayElements:function(Env:PJNIEnv;AArray:JCharArray;IsCopy:PJBoolean):PJChar; jnicall;
402 GetShortArrayElements:function(Env:PJNIEnv;AArray:JShortArray;IsCopy:PJBoolean):PJShort; jnicall;
403 GetIntArrayElements:function(Env:PJNIEnv;AArray:JIntArray;IsCopy:PJBoolean):PJInt; jnicall;
404 GetLongArrayElements:function(Env:PJNIEnv;AArray:JLongArray;IsCopy:PJBoolean):PJLong; jnicall;
405 GetFloatArrayElements:function(Env:PJNIEnv;AArray:JFloatArray;IsCopy:PJBoolean):PJFloat; jnicall;
406 GetDoubleArrayElements:function(Env:PJNIEnv;AArray:JDoubleArray;IsCopy:PJBoolean):PJDouble; jnicall;
407
408 ReleaseBooleanArrayElements:procedure(Env:PJNIEnv;AArray:JBooleanArray;Elems:PJBoolean;Mode:JInt); jnicall;
409 ReleaseByteArrayElements:procedure(Env:PJNIEnv;AArray:JByteArray;Elems:PJByte;Mode:JInt); jnicall;
410 ReleaseCharArrayElements:procedure(Env:PJNIEnv;AArray:JCharArray;Elems:PJChar;Mode:JInt); jnicall;
411 ReleaseShortArrayElements:procedure(Env:PJNIEnv;AArray:JShortArray;Elems:PJShort;Mode:JInt); jnicall;
412 ReleaseIntArrayElements:procedure(Env:PJNIEnv;AArray:JIntArray;Elems:PJInt;Mode:JInt); jnicall;
413 ReleaseLongArrayElements:procedure(Env:PJNIEnv;AArray:JLongArray;Elems:PJLong;Mode:JInt); jnicall;
414 ReleaseFloatArrayElements:procedure(Env:PJNIEnv;AArray:JFloatArray;Elems:PJFloat;Mode:JInt); jnicall;
415 ReleaseDoubleArrayElements:procedure(Env:PJNIEnv;AArray:JDoubleArray;Elems:PJDouble;Mode:JInt); jnicall;
416
417 GetBooleanArrayRegion:procedure(Env:PJNIEnv;AArray:JBooleanArray;Start:JSize;Len:JSize;Buf:PJBoolean); jnicall;
418 GetByteArrayRegion:procedure(Env:PJNIEnv;AArray:JByteArray;Start:JSize;Len:JSize;Buf:PJByte); jnicall;
419 GetCharArrayRegion:procedure(Env:PJNIEnv;AArray:JCharArray;Start:JSize;Len:JSize;Buf:PJChar); jnicall;
420 GetShortArrayRegion:procedure(Env:PJNIEnv;AArray:JShortArray;Start:JSize;Len:JSize;Buf:PJShort); jnicall;
421 GetIntArrayRegion:procedure(Env:PJNIEnv;AArray:JIntArray;Start:JSize;Len:JSize;Buf:PJInt); jnicall;
422 GetLongArrayRegion:procedure(Env:PJNIEnv;AArray:JLongArray;Start:JSize;Len:JSize;Buf:PJLong); jnicall;
423 GetFloatArrayRegion:procedure(Env:PJNIEnv;AArray:JFloatArray;Start:JSize;Len:JSize;Buf:PJFloat); jnicall;
424 GetDoubleArrayRegion:procedure(Env:PJNIEnv;AArray:JDoubleArray;Start:JSize;Len:JSize;Buf:PJDouble); jnicall;
425
426 SetBooleanArrayRegion:procedure(Env:PJNIEnv;AArray:JBooleanArray;Start:JSize;Len:JSize;Buf:PJBoolean); jnicall;
427 SetByteArrayRegion:procedure(Env:PJNIEnv;AArray:JByteArray;Start:JSize;Len:JSize;Buf:PJByte); jnicall;
428 SetCharArrayRegion:procedure(Env:PJNIEnv;AArray:JCharArray;Start:JSize;Len:JSize;Buf:PJChar); jnicall;
429 SetShortArrayRegion:procedure(Env:PJNIEnv;AArray:JShortArray;Start:JSize;Len:JSize;Buf:PJShort); jnicall;
430 SetIntArrayRegion:procedure(Env:PJNIEnv;AArray:JIntArray;Start:JSize;Len:JSize;Buf:PJInt); jnicall;
431 SetLongArrayRegion:procedure(Env:PJNIEnv;AArray:JLongArray;Start:JSize;Len:JSize;Buf:PJLong); jnicall;
432 SetFloatArrayRegion:procedure(Env:PJNIEnv;AArray:JFloatArray;Start:JSize;Len:JSize;Buf:PJFloat); jnicall;
433 SetDoubleArrayRegion:procedure(Env:PJNIEnv;AArray:JDoubleArray;Start:JSize;Len:JSize;Buf:PJDouble); jnicall;
434
435 RegisterNatives:function(Env:PJNIEnv;AClass:JClass;const Methods:PJNINativeMethod;NMethods:JInt):JInt; jnicall;
436 UnregisterNatives:function(Env:PJNIEnv;AClass:JClass):JInt; jnicall;
437
438 MonitorEnter:function(Env:PJNIEnv;Obj:JObject):JInt; jnicall;
439 MonitorExit:function(Env:PJNIEnv;Obj:JObject):JInt; jnicall;
440
441 GetJavaVM:function(Env:PJNIEnv;VM:PJavaVM):JInt; jnicall;
442
443 // String Operations
444 GetStringRegion:procedure(Env:PJNIEnv;Str:JString;Start:JSize;Len:JSize;Buf:PJChar); jnicall;
445 GetStringUTFRegion:procedure(Env:PJNIEnv;Str:JString;Start:JSize;Len:JSize;Buf:pchar); jnicall;
446
447 // Array Operations
448 GetPrimitiveArrayCritical:function(Env:PJNIEnv;AArray:JArray;IsCopy:PJBoolean):pointer; jnicall;
449 ReleasePrimitiveArrayCritical:procedure(Env:PJNIEnv;AArray:JArray;CArray:pointer;Mode:JInt); jnicall;
450
451 // String Operations
452 GetStringCritical:function(Env:PJNIEnv;Str:JString;IsCopy:PJBoolean):PJChar; jnicall;
453 ReleaseStringCritical:procedure(Env:PJNIEnv;Str:JString;CString:PJChar); jnicall;
454
455 // Weak Global References
456 NewWeakGlobalRef:function(Env:PJNIEnv;Obj:JObject):JWeak; jnicall;
457 DeleteWeakGlobalRef:procedure(Env:PJNIEnv;Ref:JWeak); jnicall;
458
459 // Exceptions
460 ExceptionCheck:function(Env:PJNIEnv):JBoolean; jnicall;
461
462 // J2SDK1_4
463 NewDirectByteBuffer:function(Env:PJNIEnv;Address:pointer;Capacity:JLong):JObject; jnicall;
464 GetDirectBufferAddress:function(Env:PJNIEnv;Buf:JObject):pointer; jnicall;
465 GetDirectBufferCapacity:function(Env:PJNIEnv;Buf:JObject):JLong; jnicall;
466
467 // added in JNI 1.6
468 GetObjectRefType:function(Env:PJNIEnv;AObject:JObject):jobjectRefType; jnicall;
469 end;
470
471 JNIInvokeInterface={$ifdef packedrecords}packed{$endif} record
472 reserved0:pointer;
473 reserved1:pointer;
474 reserved2:pointer;
475
476 DestroyJavaVM:function(PVM:PJavaVM):JInt; jnicall;
477 AttachCurrentThread:function(PVM:PJavaVM;PEnv:PPJNIEnv;Args:pointer):JInt; jnicall;
478 DetachCurrentThread:function(PVM:PJavaVM):JInt; jnicall;
479 GetEnv:function(PVM:PJavaVM;PEnv:Ppointer;Version:JInt):JInt; jnicall;
480 AttachCurrentThreadAsDaemon:function(PVM:PJavaVM;PEnv:PPJNIEnv;Args:pointer):JInt; jnicall;
481 end;
482
483 JavaVMAttachArgs={$ifdef packedrecords}packed{$endif} record
484 version:jint; // must be >= JNI_VERSION_1_2
485 name:pchar; // NULL or name of thread as modified UTF-8 str
486 group:jobject; // global ref of a ThreadGroup object, or NULL
487 end;
488
489(**
490 * JNI 1.2+ initialization. (As of 1.6, the pre-1.2 structures are no
491 * longer supported.)
492 *)
493
494 PJavaVMOption=^JavaVMOption;
495 JavaVMOption={$ifdef packedrecords}packed{$endif} record
496 optionString:pchar;
497 extraInfo:pointer;
498 end;
499
500 JavaVMInitArgs={$ifdef packedrecords}packed{$endif} record
501 version:jint; // use JNI_VERSION_1_2 or later
502 nOptions:jint;
503 options:PJavaVMOption;
504 ignoreUnrecognized:Pjboolean;
505 end;
506
507(*
508 * VM initialization functions.
509 *
510 * Note these are the only symbols exported for JNI by the VM.
511 *)
512{$ifdef jniexternals}
513function JNI_GetDefaultJavaVMInitArgs(p:pointer):jint; jnicall;external 'jni' name 'JNI_GetDefaultJavaVMInitArgs';
514function JNI_CreateJavaVM(vm:PPJavaVM;AEnv:PPJNIEnv;p:pointer):jint; jnicall;external 'jni' name 'JNI_CreateJavaVM';
515function JNI_GetCreatedJavaVMs(vm:PPJavaVM;ASize:jsize;p:Pjsize):jint; jnicall;external 'jni' name 'JNI_GetCreatedJavaVMs';
516{$endif}
517
518(*
519 * Prototypes for functions exported by loadable shared libs. These are
520 * called by JNI, not provided by JNI.
521 *)
522
523const curVM:PJavaVM=nil;
524 curEnv:PJNIEnv=nil;
525
526(*
527function JNI_OnLoad(vm:PJavaVM;reserved:pointer):jint; jnicall;
528procedure JNI_OnUnload(vm:PJavaVM;reserved:pointer); jnicall;
529*)
530
531(* Helper Routines *)
532function JNI_JStringToString( PEnv : PJNIEnv; JStr : JString ) : string;
533function JNI_StringToJString( PEnv : PJNIEnv; const AString : PAnsiChar ) : JString;
534
535implementation
536
537function JNI_OnLoad(vm:PJavaVM;reserved:pointer):jint; jnicall;
538begin
539 curVM:=vm;
540 result:=JNI_VERSION_1_6;
541end;
542
543procedure JNI_OnUnload(vm:PJavaVM;reserved:pointer); jnicall;
544begin
545end;
546
547function JNI_JStringToString( PEnv : PJNIEnv; JStr : JString ) : string;
548var
549 IsCopy: PJBoolean;
550 Chars: PAnsiChar;
551begin
552 if JStr = nil then
553 begin
554 Result := '';
555 Exit;
556 end;
557
558 Chars := PEnv^.GetStringUTFChars(PEnv, JStr, IsCopy);
559 if Chars = nil then
560 Result := ''
561 else
562 begin
563 Result := string(Chars);
564 PEnv^.ReleaseStringUTFChars(PEnv, JStr, Chars);
565 end;
566end;
567
568function JNI_StringToJString( PEnv : PJNIEnv; const AString : PAnsiChar ) : JString;
569begin
570 Result := PEnv^.NewStringUTF( PEnv, PAnsiChar( AString ) );
571end;
572
573end.
Note: See TracBrowser for help on using the repository browser.