1 module java.c.jni;
2 extern (C):
3 
4 import core.vararg;
5 
6 
7 alias int jint;
8 alias long jlong;
9 alias byte jbyte;
10 alias jint jsize;
11 alias ubyte jboolean;
12 alias ushort jchar;
13 alias short jshort;
14 alias float jfloat;
15 alias double jdouble;
16 
17 struct _jobject;
18 alias _jobject* jobject;
19 alias jobject jclass;
20 alias jobject jthrowable;
21 alias jobject jstring;
22 alias jobject jarray;
23 alias jarray jbooleanArray;
24 alias jarray jbyteArray;
25 alias jarray jcharArray;
26 alias jarray jshortArray;
27 alias jarray jintArray;
28 alias jarray jlongArray;
29 alias jarray jfloatArray;
30 alias jarray jdoubleArray;
31 alias jarray jobjectArray;
32 alias jobject jweak;
33 
34 union jvalue {
35     jboolean z;
36     jbyte    b;
37     jchar    c;
38     jshort   s;
39     jint     i;
40     jlong    j;
41     jfloat   f;
42     jdouble  d;
43     jobject  l;
44 }
45 
46 struct _jfieldID;
47 alias _jfieldID *jfieldID;
48 
49 struct _jmethodID;
50 alias _jmethodID *jmethodID;
51 
52 enum jobjectRefType {
53      JNIInvalidRefType    = 0,
54      JNILocalRefType      = 1,
55      JNIGlobalRefType     = 2,
56      JNIWeakGlobalRefType = 3 
57 }
58 
59 enum JNI_FALSE = 0;
60 enum JNI_TRUE = 1;
61 
62 enum 
63 {
64     JNI_OK = 0,
65     JNI_ERR = -1,
66     JNI_EDETACHED = -2,
67     JNI_EVERSION = -3,
68     JNI_ENOMEM = -4,
69     JNI_EEXIST = -5,
70     JNI_EINVAL = -6,
71 }
72 
73 enum JNI_COMMIT = 1;
74 enum JNI_ABORT = 2;
75 
76 struct JNINativeMethod {
77     char *name;
78     char *signature;
79     void *fnPtr;
80 } 
81 
82 alias JNINativeInterface_ *JNIEnv;
83 alias JNIInvokeInterface_ *JavaVM;
84 
85 struct JNINativeInterface_ {
86     void *reserved0;
87     void *reserved1;
88     void *reserved2;
89 
90     void *reserved3;
91     jint function(JNIEnv* env) GetVersion;
92 
93     jclass function(JNIEnv *env, const(char)* name, jobject loader, const jbyte *buf,
94        jsize len) DefineClass;
95     jclass function(JNIEnv *env, const(char)* name) FindClass;
96 
97     jmethodID function(JNIEnv *env, jobject method) FromReflectedMethod;
98     jfieldID function(JNIEnv *env, jobject field) FromReflectedField;
99 
100     jobject function(JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic) ToReflectedMethod;
101 
102     jclass function(JNIEnv *env, jclass sub) GetSuperclass;
103     jboolean function(JNIEnv *env, jclass sub, jclass sup) IsAssignableFrom;
104 
105     jobject function(JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic) ToReflectedField;
106 
107     jint function(JNIEnv *env, jthrowable obj) Throw;
108     jint function(JNIEnv *env, jclass clazz, const(char)* msg) ThrowNew;
109     jthrowable function(JNIEnv *env) ExceptionOccurred;
110     void function(JNIEnv *env) ExceptionDescribe;
111     void function(JNIEnv *env) ExceptionClear;
112     void function(JNIEnv *env, const(char)* msg) FatalError;
113 
114     jint function(JNIEnv *env, jint capacity) PushLocalFrame;
115     jobject function(JNIEnv *env, jobject result) PopLocalFrame;
116 
117     jobject function(JNIEnv *env, jobject lobj) NewGlobalRef;
118     void function(JNIEnv *env, jobject gref) DeleteGlobalRef;
119     void function(JNIEnv *env, jobject obj) DeleteLocalRef;
120     jboolean function(JNIEnv *env, jobject obj1, jobject obj2) IsSameObject;
121     jobject function(JNIEnv *env, jobject _ref) NewLocalRef;
122     jint function(JNIEnv *env, jint capacity) EnsureLocalCapacity;
123 
124     jobject function(JNIEnv *env, jclass clazz) AllocObject;
125     jobject function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) NewObject;
126     jobject function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) NewObjectV;
127     jobject function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) NewObjectA;
128 
129     jclass function(JNIEnv *env, jobject obj) GetObjectClass;
130     jboolean function(JNIEnv *env, jobject obj, jclass clazz) IsInstanceOf;
131 
132     jmethodID function(JNIEnv *env, jclass clazz, const(char)* name, const(char)* sig) GetMethodID;
133 
134     jobject function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallObjectMethod;
135     jobject function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallObjectMethodV;
136     jobject function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args) CallObjectMethodA;
137 
138     jboolean function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallBooleanMethod;
139     jboolean function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallBooleanMethodV;
140     jboolean function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args) CallBooleanMethodA;
141 
142     jbyte function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallByteMethod;
143     jbyte function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallByteMethodV;
144     jbyte function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args) CallByteMethodA;
145 
146     jchar function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallCharMethod;
147     jchar function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallCharMethodV;
148     jchar function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args) CallCharMethodA;
149 
150     jshort function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallShortMethod;
151     jshort function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallShortMethodV;
152     jshort function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args) CallShortMethodA;
153 
154     jint function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallIntMethod;
155     jint function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallIntMethodV;
156     jint function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args) CallIntMethodA;
157 
158     jlong function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallLongMethod;
159     jlong function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallLongMethodV;
160     jlong function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args) CallLongMethodA;
161 
162     jfloat function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallFloatMethod;
163     jfloat function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallFloatMethodV;
164     jfloat function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args) CallFloatMethodA;
165 
166     jdouble function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallDoubleMethod;
167     jdouble function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallDoubleMethodV;
168     jdouble function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args) CallDoubleMethodA;
169 
170     void function(JNIEnv *env, jobject obj, jmethodID methodID, ...) CallVoidMethod;
171     void function(JNIEnv *env, jobject obj, jmethodID methodID, va_list args) CallVoidMethodV;
172     void function(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args) CallVoidMethodA;
173 
174     jobject function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualObjectMethod;
175     jobject function
176       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
177        va_list args) CallNonvirtualObjectMethodV;
178     jobject function
179       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
180        const jvalue * args) CallNonvirtualObjectMethodA;
181 
182     jboolean function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualBooleanMethod;
183     jboolean function
184       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
185        va_list args) CallNonvirtualBooleanMethodV;
186     jboolean function
187       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
188        const jvalue * args) CallNonvirtualBooleanMethodA;
189 
190     jbyte function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualByteMethod;
191     jbyte function
192       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
193        va_list args) CallNonvirtualByteMethodV;
194     jbyte function
195       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
196        const jvalue *args) CallNonvirtualByteMethodA;
197 
198     jchar function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualCharMethod;
199     jchar function
200       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
201        va_list args) CallNonvirtualCharMethodV;
202     jchar function
203       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
204        const jvalue *args) CallNonvirtualCharMethodA;
205 
206     jshort function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualShortMethod;
207     jshort function
208       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
209        va_list args) CallNonvirtualShortMethodV;
210     jshort function
211       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
212        const jvalue *args) CallNonvirtualShortMethodA;
213 
214     jint function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualIntMethod;
215     jint function
216       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
217        va_list args) CallNonvirtualIntMethodV;
218     jint function
219       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
220        const jvalue *args) CallNonvirtualIntMethodA;
221 
222     jlong function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualLongMethod;
223     jlong function
224       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
225        va_list args) CallNonvirtualLongMethodV;
226     jlong function
227       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
228        const jvalue *args) CallNonvirtualLongMethodA;
229 
230     jfloat function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualFloatMethod;
231     jfloat function
232       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
233        va_list args) CallNonvirtualFloatMethodV;
234     jfloat function
235       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
236        const jvalue *args) CallNonvirtualFloatMethodA;
237 
238     jdouble function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualDoubleMethod;
239     jdouble function
240       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
241        va_list args) CallNonvirtualDoubleMethodV;
242     jdouble function
243       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
244        const jvalue *args) CallNonvirtualDoubleMethodA;
245 
246     void function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...) CallNonvirtualVoidMethod;
247     void
248       function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
249        va_list args) CallNonvirtualVoidMethodV;
250     void
251       function(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
252        const(jvalue)* args) CallNonvirtualVoidMethodA;
253 
254     jfieldID function(JNIEnv *env, jclass clazz, const(char)* name, const(char)* sig) GetFieldID;
255 
256     jobject function(JNIEnv *env, jobject obj, jfieldID fieldID) GetObjectField;
257     jboolean function(JNIEnv *env, jobject obj, jfieldID fieldID) GetBooleanField;
258     jbyte function(JNIEnv *env, jobject obj, jfieldID fieldID) GetByteField;
259     jchar function(JNIEnv *env, jobject obj, jfieldID fieldID) GetCharField;
260     jshort function(JNIEnv *env, jobject obj, jfieldID fieldID) GetShortField;
261     jint function(JNIEnv *env, jobject obj, jfieldID fieldID) GetIntField;
262     jlong function(JNIEnv *env, jobject obj, jfieldID fieldID) GetLongField;
263     jfloat function(JNIEnv *env, jobject obj, jfieldID fieldID) GetFloatField;
264     jdouble function(JNIEnv *env, jobject obj, jfieldID fieldID) GetDoubleField;
265 
266     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val) SetObjectField;
267     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val) SetBooleanField;
268     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val) SetByteField;
269     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val) SetCharField;
270     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val) SetShortField;
271     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jint val) SetIntField;
272     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val) SetLongField;
273     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val) SetFloatField;
274     void function(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val) SetDoubleField;
275 
276     jmethodID function(JNIEnv *env, jclass clazz, const(char)* name, const(char)* sig) GetStaticMethodID;
277 
278     jobject function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticObjectMethod;
279     jobject function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticObjectMethodV;
280     jobject function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticObjectMethodA;
281 
282     jboolean function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticBooleanMethod;
283     jboolean function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticBooleanMethodV;
284     jboolean function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticBooleanMethodA;
285 
286     jbyte function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticByteMethod;
287     jbyte function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticByteMethodV;
288     jbyte function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticByteMethodA;
289 
290     jchar function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticCharMethod;
291     jchar function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticCharMethodV;
292     jchar function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticCharMethodA;
293 
294     jshort function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticShortMethod;
295     jshort function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticShortMethodV;
296     jshort function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticShortMethodA;
297 
298     jint function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticIntMethod;
299     jint function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticIntMethodV;
300     jint function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticIntMethodA;
301 
302     jlong function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticLongMethod;
303     jlong function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticLongMethodV;
304     jlong function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticLongMethodA;
305 
306     jfloat function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticFloatMethod;
307     jfloat function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticFloatMethodV;
308     jfloat function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticFloatMethodA;
309 
310     jdouble function(JNIEnv *env, jclass clazz, jmethodID methodID, ...) CallStaticDoubleMethod;
311     jdouble function(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args) CallStaticDoubleMethodV;
312     jdouble function(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args) CallStaticDoubleMethodA;
313 
314     void function(JNIEnv *env, jclass cls, jmethodID methodID, ...) CallStaticVoidMethod;
315     void function(JNIEnv *env, jclass cls, jmethodID methodID, va_list args) CallStaticVoidMethodV;
316     void function(JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args) CallStaticVoidMethodA;
317 
318     jfieldID function(JNIEnv *env, jclass clazz, const(char)* name, const(char)* sig) GetStaticFieldID;
319     jobject function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticObjectField;
320     jboolean function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticBooleanField;
321     jbyte function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticByteField;
322     jchar function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticCharField;
323     jshort function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticShortField;
324     jint function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticIntField;
325     jlong function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticLongField;
326     jfloat function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticFloatField;
327     jdouble function(JNIEnv *env, jclass clazz, jfieldID fieldID) GetStaticDoubleField;
328 
329     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value) SetStaticObjectField;
330     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value) SetStaticBooleanField;
331     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value) SetStaticByteField;
332     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value) SetStaticCharField;
333     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value) SetStaticShortField;
334     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jint value) SetStaticIntField;
335     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value) SetStaticLongField;
336     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value) SetStaticFloatField;
337     void function(JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value) SetStaticDoubleField;
338 
339     jstring function(JNIEnv *env, const(jchar)* unicode, jsize len) NewString;
340     jsize function(JNIEnv *env, jstring str) GetStringLength;
341     const(jchar)* function(JNIEnv *env, jstring str, jboolean *isCopy) GetStringChars;
342     void function(JNIEnv *env, jstring str, const(jchar)* chars) ReleaseStringChars;
343 
344     jstring function(JNIEnv *env, const(char)* utf) NewStringUTF;
345     jsize function(JNIEnv *env, jstring str) GetStringUTFLength;
346     const(char)* function(JNIEnv *env, jstring str, jboolean *isCopy) GetStringUTFChars;
347     void function(JNIEnv *env, jstring str, const char* chars) ReleaseStringUTFChars;
348 
349 
350     jsize function(JNIEnv *env, jarray array) GetArrayLength;
351 
352     jobjectArray function(JNIEnv *env, jsize len, jclass clazz, jobject init) NewObjectArray;
353     jobject function(JNIEnv *env, jobjectArray array, jsize index) GetObjectArrayElement;
354     void function(JNIEnv *env, jobjectArray array, jsize index, jobject val) SetObjectArrayElement;
355 
356     jbooleanArray function(JNIEnv *env, jsize len) NewBooleanArray;
357     jbyteArray function(JNIEnv *env, jsize len) NewByteArray;
358     jcharArray function(JNIEnv *env, jsize len) NewCharArray;
359     jshortArray function(JNIEnv *env, jsize len) NewShortArray;
360     jintArray function(JNIEnv *env, jsize len) NewIntArray;
361     jlongArray function(JNIEnv *env, jsize len) NewLongArray;
362     jfloatArray function(JNIEnv *env, jsize len) NewFloatArray;
363     jdoubleArray function(JNIEnv *env, jsize len) NewDoubleArray;
364 
365     jboolean function(JNIEnv *env, jbooleanArray array, jboolean *isCopy) GetBooleanArrayElements;
366     jbyte function(JNIEnv *env, jbyteArray array, jboolean *isCopy) GetByteArrayElements;
367     jchar function(JNIEnv *env, jcharArray array, jboolean *isCopy) GetCharArrayElements;
368     jshort function(JNIEnv *env, jshortArray array, jboolean *isCopy) GetShortArrayElements;
369     jint function(JNIEnv *env, jintArray array, jboolean *isCopy) GetIntArrayElements;
370     jlong function(JNIEnv *env, jlongArray array, jboolean *isCopy) GetLongArrayElements;
371     jfloat function(JNIEnv *env, jfloatArray array, jboolean *isCopy) GetFloatArrayElements;
372     jdouble function(JNIEnv *env, jdoubleArray array, jboolean *isCopy) GetDoubleArrayElements;
373 
374     void function(JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode) ReleaseBooleanArrayElements;
375     void function(JNIEnv *env, jbyteArray array, jbyte *elems, jint mode) ReleaseByteArrayElements;
376     void function(JNIEnv *env, jcharArray array, jchar *elems, jint mode) ReleaseCharArrayElements;
377     void function(JNIEnv *env, jshortArray array, jshort *elems, jint mode) ReleaseShortArrayElements;
378     void function(JNIEnv *env, jintArray array, jint *elems, jint mode) ReleaseIntArrayElements;
379     void function(JNIEnv *env, jlongArray array, jlong *elems, jint mode) ReleaseLongArrayElements;
380     void function(JNIEnv *env, jfloatArray array, jfloat *elems, jint mode) ReleaseFloatArrayElements;
381     void function(JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode) ReleaseDoubleArrayElements;
382 
383     void function(JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf) GetBooleanArrayRegion;
384     void function(JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf) GetByteArrayRegion;
385     void function(JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf) GetCharArrayRegion;
386     void function(JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf) GetShortArrayRegion;
387     void function(JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf) GetIntArrayRegion;
388     void function(JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf) GetLongArrayRegion;
389     void function(JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf) GetFloatArrayRegion;
390     void function(JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf) GetDoubleArrayRegion;
391 
392     void function(JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf) SetBooleanArrayRegion;
393     void function(JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf) SetByteArrayRegion;
394     void function(JNIEnv *env, jcharArray array, jsize start, jsize len, const(jchar)* buf) SetCharArrayRegion;
395     void function(JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf) SetShortArrayRegion;
396     void function(JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf) SetIntArrayRegion;
397     void function(JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf) SetLongArrayRegion;
398     void function(JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf) SetFloatArrayRegion;
399     void function(JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf) SetDoubleArrayRegion;
400 
401     jint function(JNIEnv* env, jclass clazz, JNINativeMethod* methods, jint nMethods) RegisterNatives;
402     jint function(JNIEnv *env, jclass clazz) UnregisterNatives;
403 
404     jint function(JNIEnv *env, jobject obj) MonitorEnter;
405     jint function(JNIEnv *env, jobject obj) MonitorExit;
406 
407     jint function(JNIEnv *env, JavaVM **vm) GetJavaVM;
408 
409     void function(JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf) GetStringRegion;
410     void function(JNIEnv *env, jstring str, jsize start, jsize len, char *buf) GetStringUTFRegion;
411 
412     void function(JNIEnv *env, jarray array, jboolean *isCopy) GetPrimitiveArrayCritical;
413     void function(JNIEnv *env, jarray array, void *carray, jint mode) ReleasePrimitiveArrayCritical;
414 
415     const jchar function(JNIEnv *env, jstring _string, jboolean *isCopy) GetStringCritical;
416     void function(JNIEnv *env, jstring _string, const(jchar)* cstring) ReleaseStringCritical;
417 
418     jweak function(JNIEnv *env, jobject obj) NewWeakGlobalRef;
419     void function(JNIEnv *env, jweak _ref) DeleteWeakGlobalRef;
420 
421     jboolean function(JNIEnv *env) ExceptionCheck;
422 
423     jobject function(JNIEnv* env, void* address, jlong capacity) NewDirectByteBuffer;
424     void* function(JNIEnv* env, jobject buf) GetDirectBufferAddress;
425     jlong function(JNIEnv* env, jobject buf) GetDirectBufferCapacity;
426 
427     jobjectRefType function(JNIEnv* env, jobject obj) GetObjectRefType;
428 }
429 
430 struct JNIEnv_ {
431     JNINativeInterface_* functions;
432 }
433 
434 struct JavaVMOption {
435     char *optionString;
436     void *extraInfo;
437 }
438 
439 struct JavaVMInitArgs {
440     jint _version;
441 
442     jint nOptions;
443     JavaVMOption *options;
444     jboolean ignoreUnrecognized;
445 }
446 
447 struct JavaVMAttachArgs {
448     jint _version;
449 
450     char *name;
451     jobject group;
452 }
453 
454 struct JNIInvokeInterface_ {
455     void *reserved0;
456     void *reserved1;
457     void *reserved2;
458 
459     jint function(JavaVM *vm) DestroyJavaVM;
460 
461     jint function(JavaVM *vm, void **penv, void *args) AttachCurrentThread;
462 
463     jint function(JavaVM *vm) DetachCurrentThread;
464 
465     jint function(JavaVM *vm, void **penv, jint _version) GetEnv;
466 
467     jint function(JavaVM *vm, void **penv, void *args) AttachCurrentThreadAsDaemon;
468 }
469 
470 struct JavaVM_ {
471     JNIInvokeInterface_* functions;
472 }
473 
474 jint 
475 JNI_GetDefaultJavaVMInitArgs(void *args);
476 
477 jint 
478 JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
479 
480 jint 
481 JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
482 
483 jint JNI_OnLoad(JavaVM *vm, void *reserved);
484 
485 void JNI_OnUnload(JavaVM *vm, void *reserved);
486 
487 enum JNI_VERSION_1_1 = 0x00010001;
488 enum JNI_VERSION_1_2 = 0x00010002;
489 enum JNI_VERSION_1_4 = 0x00010004;
490 enum JNI_VERSION_1_6 = 0x00010006;