jni.pas 30 KB

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