jni.h 75 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013
  1. /*
  2. * Copyright (c) 1996, 2024, Oracle and/or its affiliates. All rights reserved.
  3. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4. *
  5. * This code is free software; you can redistribute it and/or modify it
  6. * under the terms of the GNU General Public License version 2 only, as
  7. * published by the Free Software Foundation. Oracle designates this
  8. * particular file as subject to the "Classpath" exception as provided
  9. * by Oracle in the LICENSE file that accompanied this code.
  10. *
  11. * This code is distributed in the hope that it will be useful, but WITHOUT
  12. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  14. * version 2 for more details (a copy is included in the LICENSE file that
  15. * accompanied this code).
  16. *
  17. * You should have received a copy of the GNU General Public License version
  18. * 2 along with this work; if not, write to the Free Software Foundation,
  19. * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20. *
  21. * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22. * or visit www.oracle.com if you need additional information or have any
  23. * questions.
  24. */
  25. /*
  26. * We used part of Netscape's Java Runtime Interface (JRI) as the starting
  27. * point of our design and implementation.
  28. */
  29. /******************************************************************************
  30. * Java Runtime Interface
  31. * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
  32. *****************************************************************************/
  33. #ifndef _JAVASOFT_JNI_H_
  34. #define _JAVASOFT_JNI_H_
  35. #include <stdio.h>
  36. #include <stdarg.h>
  37. /* jni_md.h contains the machine-dependent typedefs for jbyte, jint
  38. and jlong */
  39. #include "jni_md.h"
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. #define JNICALL
  44. /*
  45. * JNI Types
  46. */
  47. #ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H
  48. typedef unsigned char jboolean;
  49. typedef unsigned short jchar;
  50. typedef short jshort;
  51. typedef float jfloat;
  52. typedef double jdouble;
  53. typedef jint jsize;
  54. #ifdef __cplusplus
  55. class _jobject {};
  56. class _jclass : public _jobject {};
  57. class _jthrowable : public _jobject {};
  58. class _jstring : public _jobject {};
  59. class _jarray : public _jobject {};
  60. class _jbooleanArray : public _jarray {};
  61. class _jbyteArray : public _jarray {};
  62. class _jcharArray : public _jarray {};
  63. class _jshortArray : public _jarray {};
  64. class _jintArray : public _jarray {};
  65. class _jlongArray : public _jarray {};
  66. class _jfloatArray : public _jarray {};
  67. class _jdoubleArray : public _jarray {};
  68. class _jobjectArray : public _jarray {};
  69. typedef _jobject *jobject;
  70. typedef _jclass *jclass;
  71. typedef _jthrowable *jthrowable;
  72. typedef _jstring *jstring;
  73. typedef _jarray *jarray;
  74. typedef _jbooleanArray *jbooleanArray;
  75. typedef _jbyteArray *jbyteArray;
  76. typedef _jcharArray *jcharArray;
  77. typedef _jshortArray *jshortArray;
  78. typedef _jintArray *jintArray;
  79. typedef _jlongArray *jlongArray;
  80. typedef _jfloatArray *jfloatArray;
  81. typedef _jdoubleArray *jdoubleArray;
  82. typedef _jobjectArray *jobjectArray;
  83. #else
  84. struct _jobject;
  85. typedef struct _jobject *jobject;
  86. typedef jobject jclass;
  87. typedef jobject jthrowable;
  88. typedef jobject jstring;
  89. typedef jobject jarray;
  90. typedef jarray jbooleanArray;
  91. typedef jarray jbyteArray;
  92. typedef jarray jcharArray;
  93. typedef jarray jshortArray;
  94. typedef jarray jintArray;
  95. typedef jarray jlongArray;
  96. typedef jarray jfloatArray;
  97. typedef jarray jdoubleArray;
  98. typedef jarray jobjectArray;
  99. #endif
  100. typedef jobject jweak;
  101. typedef union jvalue {
  102. jboolean z;
  103. jbyte b;
  104. jchar c;
  105. jshort s;
  106. jint i;
  107. jlong j;
  108. jfloat f;
  109. jdouble d;
  110. jobject l;
  111. } jvalue;
  112. struct _jfieldID;
  113. typedef struct _jfieldID *jfieldID;
  114. struct _jmethodID;
  115. typedef struct _jmethodID *jmethodID;
  116. /* Return values from jobjectRefType */
  117. typedef enum _jobjectType {
  118. JNIInvalidRefType = 0,
  119. JNILocalRefType = 1,
  120. JNIGlobalRefType = 2,
  121. JNIWeakGlobalRefType = 3
  122. } jobjectRefType;
  123. #endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */
  124. /*
  125. * jboolean constants
  126. */
  127. #define JNI_FALSE 0
  128. #define JNI_TRUE 1
  129. /*
  130. * possible return values for JNI functions.
  131. */
  132. #define JNI_OK 0 /* success */
  133. #define JNI_ERR (-1) /* unknown error */
  134. #define JNI_EDETACHED (-2) /* thread detached from the VM */
  135. #define JNI_EVERSION (-3) /* JNI version error */
  136. #define JNI_ENOMEM (-4) /* not enough memory */
  137. #define JNI_EEXIST (-5) /* VM already created */
  138. #define JNI_EINVAL (-6) /* invalid arguments */
  139. /*
  140. * used in ReleaseScalarArrayElements
  141. */
  142. #define JNI_COMMIT 1
  143. #define JNI_ABORT 2
  144. /*
  145. * used in RegisterNatives to describe native method name, signature,
  146. * and function pointer.
  147. */
  148. typedef struct {
  149. char *name;
  150. char *signature;
  151. void *fnPtr;
  152. } JNINativeMethod;
  153. /*
  154. * JNI Native Method Interface.
  155. */
  156. struct JNINativeInterface_;
  157. struct JNIEnv_;
  158. #ifdef __cplusplus
  159. typedef JNIEnv_ JNIEnv;
  160. #else
  161. typedef const struct JNINativeInterface_ *JNIEnv;
  162. #endif
  163. /*
  164. * JNI Invocation Interface.
  165. */
  166. struct JNIInvokeInterface_;
  167. struct JavaVM_;
  168. #ifdef __cplusplus
  169. typedef JavaVM_ JavaVM;
  170. #else
  171. typedef const struct JNIInvokeInterface_ *JavaVM;
  172. #endif
  173. struct JNINativeInterface_ {
  174. void *reserved0;
  175. void *reserved1;
  176. void *reserved2;
  177. void *reserved3;
  178. jint (JNICALL *GetVersion)(JNIEnv *env);
  179. jclass (JNICALL *DefineClass)
  180. (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
  181. jsize len);
  182. jclass (JNICALL *FindClass)
  183. (JNIEnv *env, const char *name);
  184. jmethodID (JNICALL *FromReflectedMethod)
  185. (JNIEnv *env, jobject method);
  186. jfieldID (JNICALL *FromReflectedField)
  187. (JNIEnv *env, jobject field);
  188. jobject (JNICALL *ToReflectedMethod)
  189. (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);
  190. jclass (JNICALL *GetSuperclass)
  191. (JNIEnv *env, jclass sub);
  192. jboolean (JNICALL *IsAssignableFrom)
  193. (JNIEnv *env, jclass sub, jclass sup);
  194. jobject (JNICALL *ToReflectedField)
  195. (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
  196. jint (JNICALL *Throw)
  197. (JNIEnv *env, jthrowable obj);
  198. jint (JNICALL *ThrowNew)
  199. (JNIEnv *env, jclass clazz, const char *msg);
  200. jthrowable (JNICALL *ExceptionOccurred)
  201. (JNIEnv *env);
  202. void (JNICALL *ExceptionDescribe)
  203. (JNIEnv *env);
  204. void (JNICALL *ExceptionClear)
  205. (JNIEnv *env);
  206. void (JNICALL *FatalError)
  207. (JNIEnv *env, const char *msg);
  208. jint (JNICALL *PushLocalFrame)
  209. (JNIEnv *env, jint capacity);
  210. jobject (JNICALL *PopLocalFrame)
  211. (JNIEnv *env, jobject result);
  212. jobject (JNICALL *NewGlobalRef)
  213. (JNIEnv *env, jobject lobj);
  214. void (JNICALL *DeleteGlobalRef)
  215. (JNIEnv *env, jobject gref);
  216. void (JNICALL *DeleteLocalRef)
  217. (JNIEnv *env, jobject obj);
  218. jboolean (JNICALL *IsSameObject)
  219. (JNIEnv *env, jobject obj1, jobject obj2);
  220. jobject (JNICALL *NewLocalRef)
  221. (JNIEnv *env, jobject ref);
  222. jint (JNICALL *EnsureLocalCapacity)
  223. (JNIEnv *env, jint capacity);
  224. jobject (JNICALL *AllocObject)
  225. (JNIEnv *env, jclass clazz);
  226. jobject (JNICALL *NewObject)
  227. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  228. jobject (JNICALL *NewObjectV)
  229. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  230. jobject (JNICALL *NewObjectA)
  231. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  232. jclass (JNICALL *GetObjectClass)
  233. (JNIEnv *env, jobject obj);
  234. jboolean (JNICALL *IsInstanceOf)
  235. (JNIEnv *env, jobject obj, jclass clazz);
  236. jmethodID (JNICALL *GetMethodID)
  237. (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  238. jobject (JNICALL *CallObjectMethod)
  239. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  240. jobject (JNICALL *CallObjectMethodV)
  241. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  242. jobject (JNICALL *CallObjectMethodA)
  243. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
  244. jboolean (JNICALL *CallBooleanMethod)
  245. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  246. jboolean (JNICALL *CallBooleanMethodV)
  247. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  248. jboolean (JNICALL *CallBooleanMethodA)
  249. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
  250. jbyte (JNICALL *CallByteMethod)
  251. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  252. jbyte (JNICALL *CallByteMethodV)
  253. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  254. jbyte (JNICALL *CallByteMethodA)
  255. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
  256. jchar (JNICALL *CallCharMethod)
  257. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  258. jchar (JNICALL *CallCharMethodV)
  259. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  260. jchar (JNICALL *CallCharMethodA)
  261. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
  262. jshort (JNICALL *CallShortMethod)
  263. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  264. jshort (JNICALL *CallShortMethodV)
  265. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  266. jshort (JNICALL *CallShortMethodA)
  267. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
  268. jint (JNICALL *CallIntMethod)
  269. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  270. jint (JNICALL *CallIntMethodV)
  271. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  272. jint (JNICALL *CallIntMethodA)
  273. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
  274. jlong (JNICALL *CallLongMethod)
  275. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  276. jlong (JNICALL *CallLongMethodV)
  277. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  278. jlong (JNICALL *CallLongMethodA)
  279. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
  280. jfloat (JNICALL *CallFloatMethod)
  281. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  282. jfloat (JNICALL *CallFloatMethodV)
  283. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  284. jfloat (JNICALL *CallFloatMethodA)
  285. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
  286. jdouble (JNICALL *CallDoubleMethod)
  287. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  288. jdouble (JNICALL *CallDoubleMethodV)
  289. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  290. jdouble (JNICALL *CallDoubleMethodA)
  291. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
  292. void (JNICALL *CallVoidMethod)
  293. (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  294. void (JNICALL *CallVoidMethodV)
  295. (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  296. void (JNICALL *CallVoidMethodA)
  297. (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
  298. jobject (JNICALL *CallNonvirtualObjectMethod)
  299. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  300. jobject (JNICALL *CallNonvirtualObjectMethodV)
  301. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  302. va_list args);
  303. jobject (JNICALL *CallNonvirtualObjectMethodA)
  304. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  305. const jvalue * args);
  306. jboolean (JNICALL *CallNonvirtualBooleanMethod)
  307. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  308. jboolean (JNICALL *CallNonvirtualBooleanMethodV)
  309. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  310. va_list args);
  311. jboolean (JNICALL *CallNonvirtualBooleanMethodA)
  312. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  313. const jvalue * args);
  314. jbyte (JNICALL *CallNonvirtualByteMethod)
  315. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  316. jbyte (JNICALL *CallNonvirtualByteMethodV)
  317. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  318. va_list args);
  319. jbyte (JNICALL *CallNonvirtualByteMethodA)
  320. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  321. const jvalue *args);
  322. jchar (JNICALL *CallNonvirtualCharMethod)
  323. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  324. jchar (JNICALL *CallNonvirtualCharMethodV)
  325. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  326. va_list args);
  327. jchar (JNICALL *CallNonvirtualCharMethodA)
  328. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  329. const jvalue *args);
  330. jshort (JNICALL *CallNonvirtualShortMethod)
  331. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  332. jshort (JNICALL *CallNonvirtualShortMethodV)
  333. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  334. va_list args);
  335. jshort (JNICALL *CallNonvirtualShortMethodA)
  336. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  337. const jvalue *args);
  338. jint (JNICALL *CallNonvirtualIntMethod)
  339. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  340. jint (JNICALL *CallNonvirtualIntMethodV)
  341. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  342. va_list args);
  343. jint (JNICALL *CallNonvirtualIntMethodA)
  344. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  345. const jvalue *args);
  346. jlong (JNICALL *CallNonvirtualLongMethod)
  347. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  348. jlong (JNICALL *CallNonvirtualLongMethodV)
  349. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  350. va_list args);
  351. jlong (JNICALL *CallNonvirtualLongMethodA)
  352. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  353. const jvalue *args);
  354. jfloat (JNICALL *CallNonvirtualFloatMethod)
  355. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  356. jfloat (JNICALL *CallNonvirtualFloatMethodV)
  357. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  358. va_list args);
  359. jfloat (JNICALL *CallNonvirtualFloatMethodA)
  360. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  361. const jvalue *args);
  362. jdouble (JNICALL *CallNonvirtualDoubleMethod)
  363. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  364. jdouble (JNICALL *CallNonvirtualDoubleMethodV)
  365. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  366. va_list args);
  367. jdouble (JNICALL *CallNonvirtualDoubleMethodA)
  368. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  369. const jvalue *args);
  370. void (JNICALL *CallNonvirtualVoidMethod)
  371. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  372. void (JNICALL *CallNonvirtualVoidMethodV)
  373. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  374. va_list args);
  375. void (JNICALL *CallNonvirtualVoidMethodA)
  376. (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  377. const jvalue * args);
  378. jfieldID (JNICALL *GetFieldID)
  379. (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  380. jobject (JNICALL *GetObjectField)
  381. (JNIEnv *env, jobject obj, jfieldID fieldID);
  382. jboolean (JNICALL *GetBooleanField)
  383. (JNIEnv *env, jobject obj, jfieldID fieldID);
  384. jbyte (JNICALL *GetByteField)
  385. (JNIEnv *env, jobject obj, jfieldID fieldID);
  386. jchar (JNICALL *GetCharField)
  387. (JNIEnv *env, jobject obj, jfieldID fieldID);
  388. jshort (JNICALL *GetShortField)
  389. (JNIEnv *env, jobject obj, jfieldID fieldID);
  390. jint (JNICALL *GetIntField)
  391. (JNIEnv *env, jobject obj, jfieldID fieldID);
  392. jlong (JNICALL *GetLongField)
  393. (JNIEnv *env, jobject obj, jfieldID fieldID);
  394. jfloat (JNICALL *GetFloatField)
  395. (JNIEnv *env, jobject obj, jfieldID fieldID);
  396. jdouble (JNICALL *GetDoubleField)
  397. (JNIEnv *env, jobject obj, jfieldID fieldID);
  398. void (JNICALL *SetObjectField)
  399. (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
  400. void (JNICALL *SetBooleanField)
  401. (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
  402. void (JNICALL *SetByteField)
  403. (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
  404. void (JNICALL *SetCharField)
  405. (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
  406. void (JNICALL *SetShortField)
  407. (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
  408. void (JNICALL *SetIntField)
  409. (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
  410. void (JNICALL *SetLongField)
  411. (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
  412. void (JNICALL *SetFloatField)
  413. (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
  414. void (JNICALL *SetDoubleField)
  415. (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
  416. jmethodID (JNICALL *GetStaticMethodID)
  417. (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  418. jobject (JNICALL *CallStaticObjectMethod)
  419. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  420. jobject (JNICALL *CallStaticObjectMethodV)
  421. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  422. jobject (JNICALL *CallStaticObjectMethodA)
  423. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  424. jboolean (JNICALL *CallStaticBooleanMethod)
  425. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  426. jboolean (JNICALL *CallStaticBooleanMethodV)
  427. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  428. jboolean (JNICALL *CallStaticBooleanMethodA)
  429. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  430. jbyte (JNICALL *CallStaticByteMethod)
  431. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  432. jbyte (JNICALL *CallStaticByteMethodV)
  433. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  434. jbyte (JNICALL *CallStaticByteMethodA)
  435. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  436. jchar (JNICALL *CallStaticCharMethod)
  437. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  438. jchar (JNICALL *CallStaticCharMethodV)
  439. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  440. jchar (JNICALL *CallStaticCharMethodA)
  441. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  442. jshort (JNICALL *CallStaticShortMethod)
  443. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  444. jshort (JNICALL *CallStaticShortMethodV)
  445. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  446. jshort (JNICALL *CallStaticShortMethodA)
  447. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  448. jint (JNICALL *CallStaticIntMethod)
  449. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  450. jint (JNICALL *CallStaticIntMethodV)
  451. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  452. jint (JNICALL *CallStaticIntMethodA)
  453. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  454. jlong (JNICALL *CallStaticLongMethod)
  455. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  456. jlong (JNICALL *CallStaticLongMethodV)
  457. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  458. jlong (JNICALL *CallStaticLongMethodA)
  459. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  460. jfloat (JNICALL *CallStaticFloatMethod)
  461. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  462. jfloat (JNICALL *CallStaticFloatMethodV)
  463. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  464. jfloat (JNICALL *CallStaticFloatMethodA)
  465. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  466. jdouble (JNICALL *CallStaticDoubleMethod)
  467. (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  468. jdouble (JNICALL *CallStaticDoubleMethodV)
  469. (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  470. jdouble (JNICALL *CallStaticDoubleMethodA)
  471. (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
  472. void (JNICALL *CallStaticVoidMethod)
  473. (JNIEnv *env, jclass cls, jmethodID methodID, ...);
  474. void (JNICALL *CallStaticVoidMethodV)
  475. (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
  476. void (JNICALL *CallStaticVoidMethodA)
  477. (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);
  478. jfieldID (JNICALL *GetStaticFieldID)
  479. (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  480. jobject (JNICALL *GetStaticObjectField)
  481. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  482. jboolean (JNICALL *GetStaticBooleanField)
  483. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  484. jbyte (JNICALL *GetStaticByteField)
  485. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  486. jchar (JNICALL *GetStaticCharField)
  487. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  488. jshort (JNICALL *GetStaticShortField)
  489. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  490. jint (JNICALL *GetStaticIntField)
  491. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  492. jlong (JNICALL *GetStaticLongField)
  493. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  494. jfloat (JNICALL *GetStaticFloatField)
  495. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  496. jdouble (JNICALL *GetStaticDoubleField)
  497. (JNIEnv *env, jclass clazz, jfieldID fieldID);
  498. void (JNICALL *SetStaticObjectField)
  499. (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
  500. void (JNICALL *SetStaticBooleanField)
  501. (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
  502. void (JNICALL *SetStaticByteField)
  503. (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
  504. void (JNICALL *SetStaticCharField)
  505. (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
  506. void (JNICALL *SetStaticShortField)
  507. (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
  508. void (JNICALL *SetStaticIntField)
  509. (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
  510. void (JNICALL *SetStaticLongField)
  511. (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
  512. void (JNICALL *SetStaticFloatField)
  513. (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
  514. void (JNICALL *SetStaticDoubleField)
  515. (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
  516. jstring (JNICALL *NewString)
  517. (JNIEnv *env, const jchar *unicode, jsize len);
  518. jsize (JNICALL *GetStringLength)
  519. (JNIEnv *env, jstring str);
  520. const jchar *(JNICALL *GetStringChars)
  521. (JNIEnv *env, jstring str, jboolean *isCopy);
  522. void (JNICALL *ReleaseStringChars)
  523. (JNIEnv *env, jstring str, const jchar *chars);
  524. jstring (JNICALL *NewStringUTF)
  525. (JNIEnv *env, const char *utf);
  526. jsize (JNICALL *GetStringUTFLength)
  527. (JNIEnv *env, jstring str);
  528. const char* (JNICALL *GetStringUTFChars)
  529. (JNIEnv *env, jstring str, jboolean *isCopy);
  530. void (JNICALL *ReleaseStringUTFChars)
  531. (JNIEnv *env, jstring str, const char* chars);
  532. jsize (JNICALL *GetArrayLength)
  533. (JNIEnv *env, jarray array);
  534. jobjectArray (JNICALL *NewObjectArray)
  535. (JNIEnv *env, jsize len, jclass clazz, jobject init);
  536. jobject (JNICALL *GetObjectArrayElement)
  537. (JNIEnv *env, jobjectArray array, jsize index);
  538. void (JNICALL *SetObjectArrayElement)
  539. (JNIEnv *env, jobjectArray array, jsize index, jobject val);
  540. jbooleanArray (JNICALL *NewBooleanArray)
  541. (JNIEnv *env, jsize len);
  542. jbyteArray (JNICALL *NewByteArray)
  543. (JNIEnv *env, jsize len);
  544. jcharArray (JNICALL *NewCharArray)
  545. (JNIEnv *env, jsize len);
  546. jshortArray (JNICALL *NewShortArray)
  547. (JNIEnv *env, jsize len);
  548. jintArray (JNICALL *NewIntArray)
  549. (JNIEnv *env, jsize len);
  550. jlongArray (JNICALL *NewLongArray)
  551. (JNIEnv *env, jsize len);
  552. jfloatArray (JNICALL *NewFloatArray)
  553. (JNIEnv *env, jsize len);
  554. jdoubleArray (JNICALL *NewDoubleArray)
  555. (JNIEnv *env, jsize len);
  556. jboolean * (JNICALL *GetBooleanArrayElements)
  557. (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
  558. jbyte * (JNICALL *GetByteArrayElements)
  559. (JNIEnv *env, jbyteArray array, jboolean *isCopy);
  560. jchar * (JNICALL *GetCharArrayElements)
  561. (JNIEnv *env, jcharArray array, jboolean *isCopy);
  562. jshort * (JNICALL *GetShortArrayElements)
  563. (JNIEnv *env, jshortArray array, jboolean *isCopy);
  564. jint * (JNICALL *GetIntArrayElements)
  565. (JNIEnv *env, jintArray array, jboolean *isCopy);
  566. jlong * (JNICALL *GetLongArrayElements)
  567. (JNIEnv *env, jlongArray array, jboolean *isCopy);
  568. jfloat * (JNICALL *GetFloatArrayElements)
  569. (JNIEnv *env, jfloatArray array, jboolean *isCopy);
  570. jdouble * (JNICALL *GetDoubleArrayElements)
  571. (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
  572. void (JNICALL *ReleaseBooleanArrayElements)
  573. (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
  574. void (JNICALL *ReleaseByteArrayElements)
  575. (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
  576. void (JNICALL *ReleaseCharArrayElements)
  577. (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
  578. void (JNICALL *ReleaseShortArrayElements)
  579. (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
  580. void (JNICALL *ReleaseIntArrayElements)
  581. (JNIEnv *env, jintArray array, jint *elems, jint mode);
  582. void (JNICALL *ReleaseLongArrayElements)
  583. (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
  584. void (JNICALL *ReleaseFloatArrayElements)
  585. (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
  586. void (JNICALL *ReleaseDoubleArrayElements)
  587. (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
  588. void (JNICALL *GetBooleanArrayRegion)
  589. (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
  590. void (JNICALL *GetByteArrayRegion)
  591. (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
  592. void (JNICALL *GetCharArrayRegion)
  593. (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
  594. void (JNICALL *GetShortArrayRegion)
  595. (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
  596. void (JNICALL *GetIntArrayRegion)
  597. (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
  598. void (JNICALL *GetLongArrayRegion)
  599. (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
  600. void (JNICALL *GetFloatArrayRegion)
  601. (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
  602. void (JNICALL *GetDoubleArrayRegion)
  603. (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
  604. void (JNICALL *SetBooleanArrayRegion)
  605. (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);
  606. void (JNICALL *SetByteArrayRegion)
  607. (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);
  608. void (JNICALL *SetCharArrayRegion)
  609. (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);
  610. void (JNICALL *SetShortArrayRegion)
  611. (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);
  612. void (JNICALL *SetIntArrayRegion)
  613. (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);
  614. void (JNICALL *SetLongArrayRegion)
  615. (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);
  616. void (JNICALL *SetFloatArrayRegion)
  617. (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);
  618. void (JNICALL *SetDoubleArrayRegion)
  619. (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);
  620. jint (JNICALL *RegisterNatives)
  621. (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
  622. jint nMethods);
  623. jint (JNICALL *UnregisterNatives)
  624. (JNIEnv *env, jclass clazz);
  625. jint (JNICALL *MonitorEnter)
  626. (JNIEnv *env, jobject obj);
  627. jint (JNICALL *MonitorExit)
  628. (JNIEnv *env, jobject obj);
  629. jint (JNICALL *GetJavaVM)
  630. (JNIEnv *env, JavaVM **vm);
  631. void (JNICALL *GetStringRegion)
  632. (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
  633. void (JNICALL *GetStringUTFRegion)
  634. (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
  635. void * (JNICALL *GetPrimitiveArrayCritical)
  636. (JNIEnv *env, jarray array, jboolean *isCopy);
  637. void (JNICALL *ReleasePrimitiveArrayCritical)
  638. (JNIEnv *env, jarray array, void *carray, jint mode);
  639. const jchar * (JNICALL *GetStringCritical)
  640. (JNIEnv *env, jstring string, jboolean *isCopy);
  641. void (JNICALL *ReleaseStringCritical)
  642. (JNIEnv *env, jstring string, const jchar *cstring);
  643. jweak (JNICALL *NewWeakGlobalRef)
  644. (JNIEnv *env, jobject obj);
  645. void (JNICALL *DeleteWeakGlobalRef)
  646. (JNIEnv *env, jweak ref);
  647. jboolean (JNICALL *ExceptionCheck)
  648. (JNIEnv *env);
  649. jobject (JNICALL *NewDirectByteBuffer)
  650. (JNIEnv* env, void* address, jlong capacity);
  651. void* (JNICALL *GetDirectBufferAddress)
  652. (JNIEnv* env, jobject buf);
  653. jlong (JNICALL *GetDirectBufferCapacity)
  654. (JNIEnv* env, jobject buf);
  655. /* New JNI 1.6 Features */
  656. jobjectRefType (JNICALL *GetObjectRefType)
  657. (JNIEnv* env, jobject obj);
  658. /* Module Features */
  659. jobject (JNICALL *GetModule)
  660. (JNIEnv* env, jclass clazz);
  661. /* Virtual threads */
  662. jboolean (JNICALL *IsVirtualThread)
  663. (JNIEnv* env, jobject obj);
  664. /* Large UTF8 Support */
  665. jlong (JNICALL *GetStringUTFLengthAsLong)
  666. (JNIEnv *env, jstring str);
  667. };
  668. /*
  669. * We use inlined functions for C++ so that programmers can write:
  670. *
  671. * env->FindClass("java/lang/String")
  672. *
  673. * in C++ rather than:
  674. *
  675. * (*env)->FindClass(env, "java/lang/String")
  676. *
  677. * in C.
  678. */
  679. struct JNIEnv_ {
  680. const struct JNINativeInterface_ *functions;
  681. #ifdef __cplusplus
  682. jint GetVersion() {
  683. return functions->GetVersion(this);
  684. }
  685. jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
  686. jsize len) {
  687. return functions->DefineClass(this, name, loader, buf, len);
  688. }
  689. jclass FindClass(const char *name) {
  690. return functions->FindClass(this, name);
  691. }
  692. jmethodID FromReflectedMethod(jobject method) {
  693. return functions->FromReflectedMethod(this,method);
  694. }
  695. jfieldID FromReflectedField(jobject field) {
  696. return functions->FromReflectedField(this,field);
  697. }
  698. jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {
  699. return functions->ToReflectedMethod(this, cls, methodID, isStatic);
  700. }
  701. jclass GetSuperclass(jclass sub) {
  702. return functions->GetSuperclass(this, sub);
  703. }
  704. jboolean IsAssignableFrom(jclass sub, jclass sup) {
  705. return functions->IsAssignableFrom(this, sub, sup);
  706. }
  707. jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {
  708. return functions->ToReflectedField(this,cls,fieldID,isStatic);
  709. }
  710. jint Throw(jthrowable obj) {
  711. return functions->Throw(this, obj);
  712. }
  713. jint ThrowNew(jclass clazz, const char *msg) {
  714. return functions->ThrowNew(this, clazz, msg);
  715. }
  716. jthrowable ExceptionOccurred() {
  717. return functions->ExceptionOccurred(this);
  718. }
  719. void ExceptionDescribe() {
  720. functions->ExceptionDescribe(this);
  721. }
  722. void ExceptionClear() {
  723. functions->ExceptionClear(this);
  724. }
  725. void FatalError(const char *msg) {
  726. functions->FatalError(this, msg);
  727. }
  728. jint PushLocalFrame(jint capacity) {
  729. return functions->PushLocalFrame(this,capacity);
  730. }
  731. jobject PopLocalFrame(jobject result) {
  732. return functions->PopLocalFrame(this,result);
  733. }
  734. jobject NewGlobalRef(jobject lobj) {
  735. return functions->NewGlobalRef(this,lobj);
  736. }
  737. void DeleteGlobalRef(jobject gref) {
  738. functions->DeleteGlobalRef(this,gref);
  739. }
  740. void DeleteLocalRef(jobject obj) {
  741. functions->DeleteLocalRef(this, obj);
  742. }
  743. jboolean IsSameObject(jobject obj1, jobject obj2) {
  744. return functions->IsSameObject(this,obj1,obj2);
  745. }
  746. jobject NewLocalRef(jobject ref) {
  747. return functions->NewLocalRef(this,ref);
  748. }
  749. jint EnsureLocalCapacity(jint capacity) {
  750. return functions->EnsureLocalCapacity(this,capacity);
  751. }
  752. jobject AllocObject(jclass clazz) {
  753. return functions->AllocObject(this,clazz);
  754. }
  755. jobject NewObject(jclass clazz, jmethodID methodID, ...) {
  756. va_list args;
  757. jobject result;
  758. va_start(args, methodID);
  759. result = functions->NewObjectV(this,clazz,methodID,args);
  760. va_end(args);
  761. return result;
  762. }
  763. jobject NewObjectV(jclass clazz, jmethodID methodID,
  764. va_list args) {
  765. return functions->NewObjectV(this,clazz,methodID,args);
  766. }
  767. jobject NewObjectA(jclass clazz, jmethodID methodID,
  768. const jvalue *args) {
  769. return functions->NewObjectA(this,clazz,methodID,args);
  770. }
  771. jclass GetObjectClass(jobject obj) {
  772. return functions->GetObjectClass(this,obj);
  773. }
  774. jboolean IsInstanceOf(jobject obj, jclass clazz) {
  775. return functions->IsInstanceOf(this,obj,clazz);
  776. }
  777. jmethodID GetMethodID(jclass clazz, const char *name,
  778. const char *sig) {
  779. return functions->GetMethodID(this,clazz,name,sig);
  780. }
  781. jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
  782. va_list args;
  783. jobject result;
  784. va_start(args,methodID);
  785. result = functions->CallObjectMethodV(this,obj,methodID,args);
  786. va_end(args);
  787. return result;
  788. }
  789. jobject CallObjectMethodV(jobject obj, jmethodID methodID,
  790. va_list args) {
  791. return functions->CallObjectMethodV(this,obj,methodID,args);
  792. }
  793. jobject CallObjectMethodA(jobject obj, jmethodID methodID,
  794. const jvalue * args) {
  795. return functions->CallObjectMethodA(this,obj,methodID,args);
  796. }
  797. jboolean CallBooleanMethod(jobject obj,
  798. jmethodID methodID, ...) {
  799. va_list args;
  800. jboolean result;
  801. va_start(args,methodID);
  802. result = functions->CallBooleanMethodV(this,obj,methodID,args);
  803. va_end(args);
  804. return result;
  805. }
  806. jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
  807. va_list args) {
  808. return functions->CallBooleanMethodV(this,obj,methodID,args);
  809. }
  810. jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
  811. const jvalue * args) {
  812. return functions->CallBooleanMethodA(this,obj,methodID, args);
  813. }
  814. jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
  815. va_list args;
  816. jbyte result;
  817. va_start(args,methodID);
  818. result = functions->CallByteMethodV(this,obj,methodID,args);
  819. va_end(args);
  820. return result;
  821. }
  822. jbyte CallByteMethodV(jobject obj, jmethodID methodID,
  823. va_list args) {
  824. return functions->CallByteMethodV(this,obj,methodID,args);
  825. }
  826. jbyte CallByteMethodA(jobject obj, jmethodID methodID,
  827. const jvalue * args) {
  828. return functions->CallByteMethodA(this,obj,methodID,args);
  829. }
  830. jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
  831. va_list args;
  832. jchar result;
  833. va_start(args,methodID);
  834. result = functions->CallCharMethodV(this,obj,methodID,args);
  835. va_end(args);
  836. return result;
  837. }
  838. jchar CallCharMethodV(jobject obj, jmethodID methodID,
  839. va_list args) {
  840. return functions->CallCharMethodV(this,obj,methodID,args);
  841. }
  842. jchar CallCharMethodA(jobject obj, jmethodID methodID,
  843. const jvalue * args) {
  844. return functions->CallCharMethodA(this,obj,methodID,args);
  845. }
  846. jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
  847. va_list args;
  848. jshort result;
  849. va_start(args,methodID);
  850. result = functions->CallShortMethodV(this,obj,methodID,args);
  851. va_end(args);
  852. return result;
  853. }
  854. jshort CallShortMethodV(jobject obj, jmethodID methodID,
  855. va_list args) {
  856. return functions->CallShortMethodV(this,obj,methodID,args);
  857. }
  858. jshort CallShortMethodA(jobject obj, jmethodID methodID,
  859. const jvalue * args) {
  860. return functions->CallShortMethodA(this,obj,methodID,args);
  861. }
  862. jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
  863. va_list args;
  864. jint result;
  865. va_start(args,methodID);
  866. result = functions->CallIntMethodV(this,obj,methodID,args);
  867. va_end(args);
  868. return result;
  869. }
  870. jint CallIntMethodV(jobject obj, jmethodID methodID,
  871. va_list args) {
  872. return functions->CallIntMethodV(this,obj,methodID,args);
  873. }
  874. jint CallIntMethodA(jobject obj, jmethodID methodID,
  875. const jvalue * args) {
  876. return functions->CallIntMethodA(this,obj,methodID,args);
  877. }
  878. jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
  879. va_list args;
  880. jlong result;
  881. va_start(args,methodID);
  882. result = functions->CallLongMethodV(this,obj,methodID,args);
  883. va_end(args);
  884. return result;
  885. }
  886. jlong CallLongMethodV(jobject obj, jmethodID methodID,
  887. va_list args) {
  888. return functions->CallLongMethodV(this,obj,methodID,args);
  889. }
  890. jlong CallLongMethodA(jobject obj, jmethodID methodID,
  891. const jvalue * args) {
  892. return functions->CallLongMethodA(this,obj,methodID,args);
  893. }
  894. jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
  895. va_list args;
  896. jfloat result;
  897. va_start(args,methodID);
  898. result = functions->CallFloatMethodV(this,obj,methodID,args);
  899. va_end(args);
  900. return result;
  901. }
  902. jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
  903. va_list args) {
  904. return functions->CallFloatMethodV(this,obj,methodID,args);
  905. }
  906. jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
  907. const jvalue * args) {
  908. return functions->CallFloatMethodA(this,obj,methodID,args);
  909. }
  910. jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
  911. va_list args;
  912. jdouble result;
  913. va_start(args,methodID);
  914. result = functions->CallDoubleMethodV(this,obj,methodID,args);
  915. va_end(args);
  916. return result;
  917. }
  918. jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
  919. va_list args) {
  920. return functions->CallDoubleMethodV(this,obj,methodID,args);
  921. }
  922. jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
  923. const jvalue * args) {
  924. return functions->CallDoubleMethodA(this,obj,methodID,args);
  925. }
  926. void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
  927. va_list args;
  928. va_start(args,methodID);
  929. functions->CallVoidMethodV(this,obj,methodID,args);
  930. va_end(args);
  931. }
  932. void CallVoidMethodV(jobject obj, jmethodID methodID,
  933. va_list args) {
  934. functions->CallVoidMethodV(this,obj,methodID,args);
  935. }
  936. void CallVoidMethodA(jobject obj, jmethodID methodID,
  937. const jvalue * args) {
  938. functions->CallVoidMethodA(this,obj,methodID,args);
  939. }
  940. jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
  941. jmethodID methodID, ...) {
  942. va_list args;
  943. jobject result;
  944. va_start(args,methodID);
  945. result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
  946. methodID,args);
  947. va_end(args);
  948. return result;
  949. }
  950. jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
  951. jmethodID methodID, va_list args) {
  952. return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
  953. methodID,args);
  954. }
  955. jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
  956. jmethodID methodID, const jvalue * args) {
  957. return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
  958. methodID,args);
  959. }
  960. jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
  961. jmethodID methodID, ...) {
  962. va_list args;
  963. jboolean result;
  964. va_start(args,methodID);
  965. result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
  966. methodID,args);
  967. va_end(args);
  968. return result;
  969. }
  970. jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
  971. jmethodID methodID, va_list args) {
  972. return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
  973. methodID,args);
  974. }
  975. jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
  976. jmethodID methodID, const jvalue * args) {
  977. return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
  978. methodID, args);
  979. }
  980. jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
  981. jmethodID methodID, ...) {
  982. va_list args;
  983. jbyte result;
  984. va_start(args,methodID);
  985. result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
  986. methodID,args);
  987. va_end(args);
  988. return result;
  989. }
  990. jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
  991. jmethodID methodID, va_list args) {
  992. return functions->CallNonvirtualByteMethodV(this,obj,clazz,
  993. methodID,args);
  994. }
  995. jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
  996. jmethodID methodID, const jvalue * args) {
  997. return functions->CallNonvirtualByteMethodA(this,obj,clazz,
  998. methodID,args);
  999. }
  1000. jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
  1001. jmethodID methodID, ...) {
  1002. va_list args;
  1003. jchar result;
  1004. va_start(args,methodID);
  1005. result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
  1006. methodID,args);
  1007. va_end(args);
  1008. return result;
  1009. }
  1010. jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
  1011. jmethodID methodID, va_list args) {
  1012. return functions->CallNonvirtualCharMethodV(this,obj,clazz,
  1013. methodID,args);
  1014. }
  1015. jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
  1016. jmethodID methodID, const jvalue * args) {
  1017. return functions->CallNonvirtualCharMethodA(this,obj,clazz,
  1018. methodID,args);
  1019. }
  1020. jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
  1021. jmethodID methodID, ...) {
  1022. va_list args;
  1023. jshort result;
  1024. va_start(args,methodID);
  1025. result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
  1026. methodID,args);
  1027. va_end(args);
  1028. return result;
  1029. }
  1030. jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
  1031. jmethodID methodID, va_list args) {
  1032. return functions->CallNonvirtualShortMethodV(this,obj,clazz,
  1033. methodID,args);
  1034. }
  1035. jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
  1036. jmethodID methodID, const jvalue * args) {
  1037. return functions->CallNonvirtualShortMethodA(this,obj,clazz,
  1038. methodID,args);
  1039. }
  1040. jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
  1041. jmethodID methodID, ...) {
  1042. va_list args;
  1043. jint result;
  1044. va_start(args,methodID);
  1045. result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
  1046. methodID,args);
  1047. va_end(args);
  1048. return result;
  1049. }
  1050. jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
  1051. jmethodID methodID, va_list args) {
  1052. return functions->CallNonvirtualIntMethodV(this,obj,clazz,
  1053. methodID,args);
  1054. }
  1055. jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
  1056. jmethodID methodID, const jvalue * args) {
  1057. return functions->CallNonvirtualIntMethodA(this,obj,clazz,
  1058. methodID,args);
  1059. }
  1060. jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
  1061. jmethodID methodID, ...) {
  1062. va_list args;
  1063. jlong result;
  1064. va_start(args,methodID);
  1065. result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
  1066. methodID,args);
  1067. va_end(args);
  1068. return result;
  1069. }
  1070. jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
  1071. jmethodID methodID, va_list args) {
  1072. return functions->CallNonvirtualLongMethodV(this,obj,clazz,
  1073. methodID,args);
  1074. }
  1075. jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
  1076. jmethodID methodID, const jvalue * args) {
  1077. return functions->CallNonvirtualLongMethodA(this,obj,clazz,
  1078. methodID,args);
  1079. }
  1080. jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
  1081. jmethodID methodID, ...) {
  1082. va_list args;
  1083. jfloat result;
  1084. va_start(args,methodID);
  1085. result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
  1086. methodID,args);
  1087. va_end(args);
  1088. return result;
  1089. }
  1090. jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
  1091. jmethodID methodID,
  1092. va_list args) {
  1093. return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
  1094. methodID,args);
  1095. }
  1096. jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
  1097. jmethodID methodID,
  1098. const jvalue * args) {
  1099. return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
  1100. methodID,args);
  1101. }
  1102. jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
  1103. jmethodID methodID, ...) {
  1104. va_list args;
  1105. jdouble result;
  1106. va_start(args,methodID);
  1107. result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
  1108. methodID,args);
  1109. va_end(args);
  1110. return result;
  1111. }
  1112. jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
  1113. jmethodID methodID,
  1114. va_list args) {
  1115. return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
  1116. methodID,args);
  1117. }
  1118. jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
  1119. jmethodID methodID,
  1120. const jvalue * args) {
  1121. return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
  1122. methodID,args);
  1123. }
  1124. void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
  1125. jmethodID methodID, ...) {
  1126. va_list args;
  1127. va_start(args,methodID);
  1128. functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
  1129. va_end(args);
  1130. }
  1131. void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
  1132. jmethodID methodID,
  1133. va_list args) {
  1134. functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
  1135. }
  1136. void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
  1137. jmethodID methodID,
  1138. const jvalue * args) {
  1139. functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
  1140. }
  1141. jfieldID GetFieldID(jclass clazz, const char *name,
  1142. const char *sig) {
  1143. return functions->GetFieldID(this,clazz,name,sig);
  1144. }
  1145. jobject GetObjectField(jobject obj, jfieldID fieldID) {
  1146. return functions->GetObjectField(this,obj,fieldID);
  1147. }
  1148. jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
  1149. return functions->GetBooleanField(this,obj,fieldID);
  1150. }
  1151. jbyte GetByteField(jobject obj, jfieldID fieldID) {
  1152. return functions->GetByteField(this,obj,fieldID);
  1153. }
  1154. jchar GetCharField(jobject obj, jfieldID fieldID) {
  1155. return functions->GetCharField(this,obj,fieldID);
  1156. }
  1157. jshort GetShortField(jobject obj, jfieldID fieldID) {
  1158. return functions->GetShortField(this,obj,fieldID);
  1159. }
  1160. jint GetIntField(jobject obj, jfieldID fieldID) {
  1161. return functions->GetIntField(this,obj,fieldID);
  1162. }
  1163. jlong GetLongField(jobject obj, jfieldID fieldID) {
  1164. return functions->GetLongField(this,obj,fieldID);
  1165. }
  1166. jfloat GetFloatField(jobject obj, jfieldID fieldID) {
  1167. return functions->GetFloatField(this,obj,fieldID);
  1168. }
  1169. jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
  1170. return functions->GetDoubleField(this,obj,fieldID);
  1171. }
  1172. void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
  1173. functions->SetObjectField(this,obj,fieldID,val);
  1174. }
  1175. void SetBooleanField(jobject obj, jfieldID fieldID,
  1176. jboolean val) {
  1177. functions->SetBooleanField(this,obj,fieldID,val);
  1178. }
  1179. void SetByteField(jobject obj, jfieldID fieldID,
  1180. jbyte val) {
  1181. functions->SetByteField(this,obj,fieldID,val);
  1182. }
  1183. void SetCharField(jobject obj, jfieldID fieldID,
  1184. jchar val) {
  1185. functions->SetCharField(this,obj,fieldID,val);
  1186. }
  1187. void SetShortField(jobject obj, jfieldID fieldID,
  1188. jshort val) {
  1189. functions->SetShortField(this,obj,fieldID,val);
  1190. }
  1191. void SetIntField(jobject obj, jfieldID fieldID,
  1192. jint val) {
  1193. functions->SetIntField(this,obj,fieldID,val);
  1194. }
  1195. void SetLongField(jobject obj, jfieldID fieldID,
  1196. jlong val) {
  1197. functions->SetLongField(this,obj,fieldID,val);
  1198. }
  1199. void SetFloatField(jobject obj, jfieldID fieldID,
  1200. jfloat val) {
  1201. functions->SetFloatField(this,obj,fieldID,val);
  1202. }
  1203. void SetDoubleField(jobject obj, jfieldID fieldID,
  1204. jdouble val) {
  1205. functions->SetDoubleField(this,obj,fieldID,val);
  1206. }
  1207. jmethodID GetStaticMethodID(jclass clazz, const char *name,
  1208. const char *sig) {
  1209. return functions->GetStaticMethodID(this,clazz,name,sig);
  1210. }
  1211. jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
  1212. ...) {
  1213. va_list args;
  1214. jobject result;
  1215. va_start(args,methodID);
  1216. result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
  1217. va_end(args);
  1218. return result;
  1219. }
  1220. jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
  1221. va_list args) {
  1222. return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
  1223. }
  1224. jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
  1225. const jvalue *args) {
  1226. return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
  1227. }
  1228. jboolean CallStaticBooleanMethod(jclass clazz,
  1229. jmethodID methodID, ...) {
  1230. va_list args;
  1231. jboolean result;
  1232. va_start(args,methodID);
  1233. result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
  1234. va_end(args);
  1235. return result;
  1236. }
  1237. jboolean CallStaticBooleanMethodV(jclass clazz,
  1238. jmethodID methodID, va_list args) {
  1239. return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
  1240. }
  1241. jboolean CallStaticBooleanMethodA(jclass clazz,
  1242. jmethodID methodID, const jvalue *args) {
  1243. return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
  1244. }
  1245. jbyte CallStaticByteMethod(jclass clazz,
  1246. jmethodID methodID, ...) {
  1247. va_list args;
  1248. jbyte result;
  1249. va_start(args,methodID);
  1250. result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
  1251. va_end(args);
  1252. return result;
  1253. }
  1254. jbyte CallStaticByteMethodV(jclass clazz,
  1255. jmethodID methodID, va_list args) {
  1256. return functions->CallStaticByteMethodV(this,clazz,methodID,args);
  1257. }
  1258. jbyte CallStaticByteMethodA(jclass clazz,
  1259. jmethodID methodID, const jvalue *args) {
  1260. return functions->CallStaticByteMethodA(this,clazz,methodID,args);
  1261. }
  1262. jchar CallStaticCharMethod(jclass clazz,
  1263. jmethodID methodID, ...) {
  1264. va_list args;
  1265. jchar result;
  1266. va_start(args,methodID);
  1267. result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
  1268. va_end(args);
  1269. return result;
  1270. }
  1271. jchar CallStaticCharMethodV(jclass clazz,
  1272. jmethodID methodID, va_list args) {
  1273. return functions->CallStaticCharMethodV(this,clazz,methodID,args);
  1274. }
  1275. jchar CallStaticCharMethodA(jclass clazz,
  1276. jmethodID methodID, const jvalue *args) {
  1277. return functions->CallStaticCharMethodA(this,clazz,methodID,args);
  1278. }
  1279. jshort CallStaticShortMethod(jclass clazz,
  1280. jmethodID methodID, ...) {
  1281. va_list args;
  1282. jshort result;
  1283. va_start(args,methodID);
  1284. result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
  1285. va_end(args);
  1286. return result;
  1287. }
  1288. jshort CallStaticShortMethodV(jclass clazz,
  1289. jmethodID methodID, va_list args) {
  1290. return functions->CallStaticShortMethodV(this,clazz,methodID,args);
  1291. }
  1292. jshort CallStaticShortMethodA(jclass clazz,
  1293. jmethodID methodID, const jvalue *args) {
  1294. return functions->CallStaticShortMethodA(this,clazz,methodID,args);
  1295. }
  1296. jint CallStaticIntMethod(jclass clazz,
  1297. jmethodID methodID, ...) {
  1298. va_list args;
  1299. jint result;
  1300. va_start(args,methodID);
  1301. result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
  1302. va_end(args);
  1303. return result;
  1304. }
  1305. jint CallStaticIntMethodV(jclass clazz,
  1306. jmethodID methodID, va_list args) {
  1307. return functions->CallStaticIntMethodV(this,clazz,methodID,args);
  1308. }
  1309. jint CallStaticIntMethodA(jclass clazz,
  1310. jmethodID methodID, const jvalue *args) {
  1311. return functions->CallStaticIntMethodA(this,clazz,methodID,args);
  1312. }
  1313. jlong CallStaticLongMethod(jclass clazz,
  1314. jmethodID methodID, ...) {
  1315. va_list args;
  1316. jlong result;
  1317. va_start(args,methodID);
  1318. result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
  1319. va_end(args);
  1320. return result;
  1321. }
  1322. jlong CallStaticLongMethodV(jclass clazz,
  1323. jmethodID methodID, va_list args) {
  1324. return functions->CallStaticLongMethodV(this,clazz,methodID,args);
  1325. }
  1326. jlong CallStaticLongMethodA(jclass clazz,
  1327. jmethodID methodID, const jvalue *args) {
  1328. return functions->CallStaticLongMethodA(this,clazz,methodID,args);
  1329. }
  1330. jfloat CallStaticFloatMethod(jclass clazz,
  1331. jmethodID methodID, ...) {
  1332. va_list args;
  1333. jfloat result;
  1334. va_start(args,methodID);
  1335. result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
  1336. va_end(args);
  1337. return result;
  1338. }
  1339. jfloat CallStaticFloatMethodV(jclass clazz,
  1340. jmethodID methodID, va_list args) {
  1341. return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
  1342. }
  1343. jfloat CallStaticFloatMethodA(jclass clazz,
  1344. jmethodID methodID, const jvalue *args) {
  1345. return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
  1346. }
  1347. jdouble CallStaticDoubleMethod(jclass clazz,
  1348. jmethodID methodID, ...) {
  1349. va_list args;
  1350. jdouble result;
  1351. va_start(args,methodID);
  1352. result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
  1353. va_end(args);
  1354. return result;
  1355. }
  1356. jdouble CallStaticDoubleMethodV(jclass clazz,
  1357. jmethodID methodID, va_list args) {
  1358. return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
  1359. }
  1360. jdouble CallStaticDoubleMethodA(jclass clazz,
  1361. jmethodID methodID, const jvalue *args) {
  1362. return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
  1363. }
  1364. void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
  1365. va_list args;
  1366. va_start(args,methodID);
  1367. functions->CallStaticVoidMethodV(this,cls,methodID,args);
  1368. va_end(args);
  1369. }
  1370. void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
  1371. va_list args) {
  1372. functions->CallStaticVoidMethodV(this,cls,methodID,args);
  1373. }
  1374. void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
  1375. const jvalue * args) {
  1376. functions->CallStaticVoidMethodA(this,cls,methodID,args);
  1377. }
  1378. jfieldID GetStaticFieldID(jclass clazz, const char *name,
  1379. const char *sig) {
  1380. return functions->GetStaticFieldID(this,clazz,name,sig);
  1381. }
  1382. jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
  1383. return functions->GetStaticObjectField(this,clazz,fieldID);
  1384. }
  1385. jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
  1386. return functions->GetStaticBooleanField(this,clazz,fieldID);
  1387. }
  1388. jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
  1389. return functions->GetStaticByteField(this,clazz,fieldID);
  1390. }
  1391. jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
  1392. return functions->GetStaticCharField(this,clazz,fieldID);
  1393. }
  1394. jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
  1395. return functions->GetStaticShortField(this,clazz,fieldID);
  1396. }
  1397. jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
  1398. return functions->GetStaticIntField(this,clazz,fieldID);
  1399. }
  1400. jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
  1401. return functions->GetStaticLongField(this,clazz,fieldID);
  1402. }
  1403. jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
  1404. return functions->GetStaticFloatField(this,clazz,fieldID);
  1405. }
  1406. jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
  1407. return functions->GetStaticDoubleField(this,clazz,fieldID);
  1408. }
  1409. void SetStaticObjectField(jclass clazz, jfieldID fieldID,
  1410. jobject value) {
  1411. functions->SetStaticObjectField(this,clazz,fieldID,value);
  1412. }
  1413. void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
  1414. jboolean value) {
  1415. functions->SetStaticBooleanField(this,clazz,fieldID,value);
  1416. }
  1417. void SetStaticByteField(jclass clazz, jfieldID fieldID,
  1418. jbyte value) {
  1419. functions->SetStaticByteField(this,clazz,fieldID,value);
  1420. }
  1421. void SetStaticCharField(jclass clazz, jfieldID fieldID,
  1422. jchar value) {
  1423. functions->SetStaticCharField(this,clazz,fieldID,value);
  1424. }
  1425. void SetStaticShortField(jclass clazz, jfieldID fieldID,
  1426. jshort value) {
  1427. functions->SetStaticShortField(this,clazz,fieldID,value);
  1428. }
  1429. void SetStaticIntField(jclass clazz, jfieldID fieldID,
  1430. jint value) {
  1431. functions->SetStaticIntField(this,clazz,fieldID,value);
  1432. }
  1433. void SetStaticLongField(jclass clazz, jfieldID fieldID,
  1434. jlong value) {
  1435. functions->SetStaticLongField(this,clazz,fieldID,value);
  1436. }
  1437. void SetStaticFloatField(jclass clazz, jfieldID fieldID,
  1438. jfloat value) {
  1439. functions->SetStaticFloatField(this,clazz,fieldID,value);
  1440. }
  1441. void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
  1442. jdouble value) {
  1443. functions->SetStaticDoubleField(this,clazz,fieldID,value);
  1444. }
  1445. jstring NewString(const jchar *unicode, jsize len) {
  1446. return functions->NewString(this,unicode,len);
  1447. }
  1448. jsize GetStringLength(jstring str) {
  1449. return functions->GetStringLength(this,str);
  1450. }
  1451. const jchar *GetStringChars(jstring str, jboolean *isCopy) {
  1452. return functions->GetStringChars(this,str,isCopy);
  1453. }
  1454. void ReleaseStringChars(jstring str, const jchar *chars) {
  1455. functions->ReleaseStringChars(this,str,chars);
  1456. }
  1457. jstring NewStringUTF(const char *utf) {
  1458. return functions->NewStringUTF(this,utf);
  1459. }
  1460. jsize GetStringUTFLength(jstring str) {
  1461. return functions->GetStringUTFLength(this,str);
  1462. }
  1463. jlong GetStringUTFLengthAsLong(jstring str) {
  1464. return functions->GetStringUTFLengthAsLong(this,str);
  1465. }
  1466. const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
  1467. return functions->GetStringUTFChars(this,str,isCopy);
  1468. }
  1469. void ReleaseStringUTFChars(jstring str, const char* chars) {
  1470. functions->ReleaseStringUTFChars(this,str,chars);
  1471. }
  1472. jsize GetArrayLength(jarray array) {
  1473. return functions->GetArrayLength(this,array);
  1474. }
  1475. jobjectArray NewObjectArray(jsize len, jclass clazz,
  1476. jobject init) {
  1477. return functions->NewObjectArray(this,len,clazz,init);
  1478. }
  1479. jobject GetObjectArrayElement(jobjectArray array, jsize index) {
  1480. return functions->GetObjectArrayElement(this,array,index);
  1481. }
  1482. void SetObjectArrayElement(jobjectArray array, jsize index,
  1483. jobject val) {
  1484. functions->SetObjectArrayElement(this,array,index,val);
  1485. }
  1486. jbooleanArray NewBooleanArray(jsize len) {
  1487. return functions->NewBooleanArray(this,len);
  1488. }
  1489. jbyteArray NewByteArray(jsize len) {
  1490. return functions->NewByteArray(this,len);
  1491. }
  1492. jcharArray NewCharArray(jsize len) {
  1493. return functions->NewCharArray(this,len);
  1494. }
  1495. jshortArray NewShortArray(jsize len) {
  1496. return functions->NewShortArray(this,len);
  1497. }
  1498. jintArray NewIntArray(jsize len) {
  1499. return functions->NewIntArray(this,len);
  1500. }
  1501. jlongArray NewLongArray(jsize len) {
  1502. return functions->NewLongArray(this,len);
  1503. }
  1504. jfloatArray NewFloatArray(jsize len) {
  1505. return functions->NewFloatArray(this,len);
  1506. }
  1507. jdoubleArray NewDoubleArray(jsize len) {
  1508. return functions->NewDoubleArray(this,len);
  1509. }
  1510. jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
  1511. return functions->GetBooleanArrayElements(this,array,isCopy);
  1512. }
  1513. jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
  1514. return functions->GetByteArrayElements(this,array,isCopy);
  1515. }
  1516. jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
  1517. return functions->GetCharArrayElements(this,array,isCopy);
  1518. }
  1519. jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
  1520. return functions->GetShortArrayElements(this,array,isCopy);
  1521. }
  1522. jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
  1523. return functions->GetIntArrayElements(this,array,isCopy);
  1524. }
  1525. jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
  1526. return functions->GetLongArrayElements(this,array,isCopy);
  1527. }
  1528. jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
  1529. return functions->GetFloatArrayElements(this,array,isCopy);
  1530. }
  1531. jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
  1532. return functions->GetDoubleArrayElements(this,array,isCopy);
  1533. }
  1534. void ReleaseBooleanArrayElements(jbooleanArray array,
  1535. jboolean *elems,
  1536. jint mode) {
  1537. functions->ReleaseBooleanArrayElements(this,array,elems,mode);
  1538. }
  1539. void ReleaseByteArrayElements(jbyteArray array,
  1540. jbyte *elems,
  1541. jint mode) {
  1542. functions->ReleaseByteArrayElements(this,array,elems,mode);
  1543. }
  1544. void ReleaseCharArrayElements(jcharArray array,
  1545. jchar *elems,
  1546. jint mode) {
  1547. functions->ReleaseCharArrayElements(this,array,elems,mode);
  1548. }
  1549. void ReleaseShortArrayElements(jshortArray array,
  1550. jshort *elems,
  1551. jint mode) {
  1552. functions->ReleaseShortArrayElements(this,array,elems,mode);
  1553. }
  1554. void ReleaseIntArrayElements(jintArray array,
  1555. jint *elems,
  1556. jint mode) {
  1557. functions->ReleaseIntArrayElements(this,array,elems,mode);
  1558. }
  1559. void ReleaseLongArrayElements(jlongArray array,
  1560. jlong *elems,
  1561. jint mode) {
  1562. functions->ReleaseLongArrayElements(this,array,elems,mode);
  1563. }
  1564. void ReleaseFloatArrayElements(jfloatArray array,
  1565. jfloat *elems,
  1566. jint mode) {
  1567. functions->ReleaseFloatArrayElements(this,array,elems,mode);
  1568. }
  1569. void ReleaseDoubleArrayElements(jdoubleArray array,
  1570. jdouble *elems,
  1571. jint mode) {
  1572. functions->ReleaseDoubleArrayElements(this,array,elems,mode);
  1573. }
  1574. void GetBooleanArrayRegion(jbooleanArray array,
  1575. jsize start, jsize len, jboolean *buf) {
  1576. functions->GetBooleanArrayRegion(this,array,start,len,buf);
  1577. }
  1578. void GetByteArrayRegion(jbyteArray array,
  1579. jsize start, jsize len, jbyte *buf) {
  1580. functions->GetByteArrayRegion(this,array,start,len,buf);
  1581. }
  1582. void GetCharArrayRegion(jcharArray array,
  1583. jsize start, jsize len, jchar *buf) {
  1584. functions->GetCharArrayRegion(this,array,start,len,buf);
  1585. }
  1586. void GetShortArrayRegion(jshortArray array,
  1587. jsize start, jsize len, jshort *buf) {
  1588. functions->GetShortArrayRegion(this,array,start,len,buf);
  1589. }
  1590. void GetIntArrayRegion(jintArray array,
  1591. jsize start, jsize len, jint *buf) {
  1592. functions->GetIntArrayRegion(this,array,start,len,buf);
  1593. }
  1594. void GetLongArrayRegion(jlongArray array,
  1595. jsize start, jsize len, jlong *buf) {
  1596. functions->GetLongArrayRegion(this,array,start,len,buf);
  1597. }
  1598. void GetFloatArrayRegion(jfloatArray array,
  1599. jsize start, jsize len, jfloat *buf) {
  1600. functions->GetFloatArrayRegion(this,array,start,len,buf);
  1601. }
  1602. void GetDoubleArrayRegion(jdoubleArray array,
  1603. jsize start, jsize len, jdouble *buf) {
  1604. functions->GetDoubleArrayRegion(this,array,start,len,buf);
  1605. }
  1606. void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
  1607. const jboolean *buf) {
  1608. functions->SetBooleanArrayRegion(this,array,start,len,buf);
  1609. }
  1610. void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
  1611. const jbyte *buf) {
  1612. functions->SetByteArrayRegion(this,array,start,len,buf);
  1613. }
  1614. void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
  1615. const jchar *buf) {
  1616. functions->SetCharArrayRegion(this,array,start,len,buf);
  1617. }
  1618. void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
  1619. const jshort *buf) {
  1620. functions->SetShortArrayRegion(this,array,start,len,buf);
  1621. }
  1622. void SetIntArrayRegion(jintArray array, jsize start, jsize len,
  1623. const jint *buf) {
  1624. functions->SetIntArrayRegion(this,array,start,len,buf);
  1625. }
  1626. void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
  1627. const jlong *buf) {
  1628. functions->SetLongArrayRegion(this,array,start,len,buf);
  1629. }
  1630. void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
  1631. const jfloat *buf) {
  1632. functions->SetFloatArrayRegion(this,array,start,len,buf);
  1633. }
  1634. void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
  1635. const jdouble *buf) {
  1636. functions->SetDoubleArrayRegion(this,array,start,len,buf);
  1637. }
  1638. jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
  1639. jint nMethods) {
  1640. return functions->RegisterNatives(this,clazz,methods,nMethods);
  1641. }
  1642. jint UnregisterNatives(jclass clazz) {
  1643. return functions->UnregisterNatives(this,clazz);
  1644. }
  1645. jint MonitorEnter(jobject obj) {
  1646. return functions->MonitorEnter(this,obj);
  1647. }
  1648. jint MonitorExit(jobject obj) {
  1649. return functions->MonitorExit(this,obj);
  1650. }
  1651. jint GetJavaVM(JavaVM **vm) {
  1652. return functions->GetJavaVM(this,vm);
  1653. }
  1654. void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {
  1655. functions->GetStringRegion(this,str,start,len,buf);
  1656. }
  1657. void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {
  1658. functions->GetStringUTFRegion(this,str,start,len,buf);
  1659. }
  1660. void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {
  1661. return functions->GetPrimitiveArrayCritical(this,array,isCopy);
  1662. }
  1663. void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {
  1664. functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);
  1665. }
  1666. const jchar * GetStringCritical(jstring string, jboolean *isCopy) {
  1667. return functions->GetStringCritical(this,string,isCopy);
  1668. }
  1669. void ReleaseStringCritical(jstring string, const jchar *cstring) {
  1670. functions->ReleaseStringCritical(this,string,cstring);
  1671. }
  1672. jweak NewWeakGlobalRef(jobject obj) {
  1673. return functions->NewWeakGlobalRef(this,obj);
  1674. }
  1675. void DeleteWeakGlobalRef(jweak ref) {
  1676. functions->DeleteWeakGlobalRef(this,ref);
  1677. }
  1678. jboolean ExceptionCheck() {
  1679. return functions->ExceptionCheck(this);
  1680. }
  1681. jobject NewDirectByteBuffer(void* address, jlong capacity) {
  1682. return functions->NewDirectByteBuffer(this, address, capacity);
  1683. }
  1684. void* GetDirectBufferAddress(jobject buf) {
  1685. return functions->GetDirectBufferAddress(this, buf);
  1686. }
  1687. jlong GetDirectBufferCapacity(jobject buf) {
  1688. return functions->GetDirectBufferCapacity(this, buf);
  1689. }
  1690. jobjectRefType GetObjectRefType(jobject obj) {
  1691. return functions->GetObjectRefType(this, obj);
  1692. }
  1693. /* Module Features */
  1694. jobject GetModule(jclass clazz) {
  1695. return functions->GetModule(this, clazz);
  1696. }
  1697. /* Virtual threads */
  1698. jboolean IsVirtualThread(jobject obj) {
  1699. return functions->IsVirtualThread(this, obj);
  1700. }
  1701. #endif /* __cplusplus */
  1702. };
  1703. /*
  1704. * optionString may be any option accepted by the JVM, or one of the
  1705. * following:
  1706. *
  1707. * -D<name>=<value> Set a system property.
  1708. * -verbose[:class|gc|jni] Enable verbose output, comma-separated. E.g.
  1709. * "-verbose:class" or "-verbose:gc,class"
  1710. * Standard names include: gc, class, and jni.
  1711. * All nonstandard (VM-specific) names must begin
  1712. * with "X".
  1713. * vfprintf extraInfo is a pointer to the vfprintf hook.
  1714. * exit extraInfo is a pointer to the exit hook.
  1715. * abort extraInfo is a pointer to the abort hook.
  1716. */
  1717. typedef struct JavaVMOption {
  1718. char *optionString;
  1719. void *extraInfo;
  1720. } JavaVMOption;
  1721. typedef struct JavaVMInitArgs {
  1722. jint version;
  1723. jint nOptions;
  1724. JavaVMOption *options;
  1725. jboolean ignoreUnrecognized;
  1726. } JavaVMInitArgs;
  1727. typedef struct JavaVMAttachArgs {
  1728. jint version;
  1729. char *name;
  1730. jobject group;
  1731. } JavaVMAttachArgs;
  1732. /* These will be VM-specific. */
  1733. #define JDK1_2
  1734. #define JDK1_4
  1735. /* End VM-specific. */
  1736. struct JNIInvokeInterface_ {
  1737. void *reserved0;
  1738. void *reserved1;
  1739. void *reserved2;
  1740. jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
  1741. jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);
  1742. jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
  1743. jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);
  1744. jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);
  1745. };
  1746. struct JavaVM_ {
  1747. const struct JNIInvokeInterface_ *functions;
  1748. #ifdef __cplusplus
  1749. jint DestroyJavaVM() {
  1750. return functions->DestroyJavaVM(this);
  1751. }
  1752. jint AttachCurrentThread(void **penv, void *args) {
  1753. return functions->AttachCurrentThread(this, penv, args);
  1754. }
  1755. jint DetachCurrentThread() {
  1756. return functions->DetachCurrentThread(this);
  1757. }
  1758. jint GetEnv(void **penv, jint version) {
  1759. return functions->GetEnv(this, penv, version);
  1760. }
  1761. jint AttachCurrentThreadAsDaemon(void **penv, void *args) {
  1762. return functions->AttachCurrentThreadAsDaemon(this, penv, args);
  1763. }
  1764. #endif
  1765. };
  1766. #ifdef _JNI_IMPLEMENTATION_
  1767. #define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT
  1768. #else
  1769. #define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT
  1770. #endif
  1771. _JNI_IMPORT_OR_EXPORT_ jint JNICALL
  1772. JNI_GetDefaultJavaVMInitArgs(void *args);
  1773. _JNI_IMPORT_OR_EXPORT_ jint JNICALL
  1774. JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
  1775. _JNI_IMPORT_OR_EXPORT_ jint JNICALL
  1776. JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
  1777. /* Defined by native libraries. */
  1778. JNIEXPORT jint JNICALL
  1779. JNI_OnLoad(JavaVM *vm, void *reserved);
  1780. JNIEXPORT void JNICALL
  1781. JNI_OnUnload(JavaVM *vm, void *reserved);
  1782. #define JNI_VERSION_1_1 0x00010001
  1783. #define JNI_VERSION_1_2 0x00010002
  1784. #define JNI_VERSION_1_4 0x00010004
  1785. #define JNI_VERSION_1_6 0x00010006
  1786. #define JNI_VERSION_1_8 0x00010008
  1787. #define JNI_VERSION_9 0x00090000
  1788. #define JNI_VERSION_10 0x000a0000
  1789. #define JNI_VERSION_19 0x00130000
  1790. #define JNI_VERSION_20 0x00140000
  1791. #define JNI_VERSION_21 0x00150000
  1792. #define JNI_VERSION_24 0x00180000
  1793. #ifdef __cplusplus
  1794. } /* extern "C" */
  1795. #endif /* __cplusplus */
  1796. #endif /* !_JAVASOFT_JNI_H_ */