1 /* dstep -I/path/to/ndk-r9d/platforms/android-9/arch-x86/usr/include -I/path/to/ndk-r9d/toolchains/llvm-3.4/prebuilt/linux-x86/lib/clang/3.4/include /path/to/ndk-r9d/platforms/android-9/arch-x86/usr/include/jni.h -o jni.d*/
2 
3 module jni;
4 
5 version (Android):
6 extern (C):
7 @system:
8 nothrow:
9 @nogc:
10 
11 import core.stdc.stdarg;
12 
13 alias ubyte jboolean;
14 alias byte jbyte;
15 alias ushort jchar;
16 alias short jshort;
17 alias int jint;
18 alias long jlong;
19 alias float jfloat;
20 alias double jdouble;
21 alias jint jsize;
22 alias void* jobject;
23 alias jobject jclass;
24 alias jobject jstring;
25 alias jobject jarray;
26 alias jarray jobjectArray;
27 alias jarray jbooleanArray;
28 alias jarray jbyteArray;
29 alias jarray jcharArray;
30 alias jarray jshortArray;
31 alias jarray jintArray;
32 alias jarray jlongArray;
33 alias jarray jfloatArray;
34 alias jarray jdoubleArray;
35 alias jobject jthrowable;
36 alias jobject jweak;
37 alias _jfieldID* jfieldID;
38 alias _jmethodID* jmethodID;
39 alias const(JNINativeInterface)* C_JNIEnv;
40 alias const(JNINativeInterface)* JNIEnv;
41 alias const(JNIInvokeInterface)* JavaVM;
42 
43 enum jobjectRefType
44 {
45     JNIInvalidRefType = 0,
46     JNILocalRefType = 1,
47     JNIGlobalRefType = 2,
48     JNIWeakGlobalRefType = 3
49 }
50 
51 enum JNI_FALSE = 0;
52 enum JNI_TRUE = 1;
53 enum JNI_VERSION_1_1 = 0x00010001;
54 enum JNI_VERSION_1_2 = 0x00010002;
55 enum JNI_VERSION_1_4 = 0x00010004;
56 enum JNI_VERSION_1_6 = 0x00010006;
57 enum JNI_OK = 0;
58 enum JNI_ERR = -1;
59 enum JNI_EDETACHED = -2;
60 enum JNI_EVERSION = -3;
61 enum JNI_COMMIT = 1; 
62 enum JNI_ABORT = 2; 
63 
64 struct JNINativeMethod
65 {
66     const(char)* name;
67     const(char)* signature;
68     void* fnPtr;
69 }
70 
71 struct JNINativeInterface
72 {
73     void* reserved0;
74     void* reserved1;
75     void* reserved2;
76     void* reserved3;
77     jint function(JNIEnv*) GetVersion;
78     jclass function(JNIEnv*, const(char)*, jobject, const(jbyte)*, jsize) DefineClass;
79     jclass function(JNIEnv*, const(char)*) FindClass;
80     jmethodID function(JNIEnv*, jobject) FromReflectedMethod;
81     jfieldID function(JNIEnv*, jobject) FromReflectedField;
82     jobject function(JNIEnv*, jclass, jmethodID, jboolean) ToReflectedMethod;
83     jclass function(JNIEnv*, jclass) GetSuperclass;
84     jboolean function(JNIEnv*, jclass, jclass) IsAssignableFrom;
85     jobject function(JNIEnv*, jclass, jfieldID, jboolean) ToReflectedField;
86     jint function(JNIEnv*, jthrowable) Throw;
87     jint function(JNIEnv*, jclass, const(char)*) ThrowNew;
88     jthrowable function(JNIEnv*) ExceptionOccurred;
89     void function(JNIEnv*) ExceptionDescribe;
90     void function(JNIEnv*) ExceptionClear;
91     void function(JNIEnv*, const(char)*) FatalError;
92     jint function(JNIEnv*, jint) PushLocalFrame;
93     jobject function(JNIEnv*, jobject) PopLocalFrame;
94     jobject function(JNIEnv*, jobject) NewGlobalRef;
95     void function(JNIEnv*, jobject) DeleteGlobalRef;
96     void function(JNIEnv*, jobject) DeleteLocalRef;
97     jboolean function(JNIEnv*, jobject, jobject) IsSameObject;
98     jobject function(JNIEnv*, jobject) NewLocalRef;
99     jint function(JNIEnv*, jint) EnsureLocalCapacity;
100     jobject function(JNIEnv*, jclass) AllocObject;
101     jobject function(JNIEnv*, jclass, jmethodID, ...) NewObject;
102     jobject function(JNIEnv*, jclass, jmethodID, va_list) NewObjectV;
103     jobject function(JNIEnv*, jclass, jmethodID, jvalue*) NewObjectA;
104     jclass function(JNIEnv*, jobject) GetObjectClass;
105     jboolean function(JNIEnv*, jobject, jclass) IsInstanceOf;
106     jmethodID function(JNIEnv*, jclass, const(char)*, const(char)*) GetMethodID;
107     jobject function(JNIEnv*, jobject, jmethodID, ...) CallObjectMethod;
108     jobject function(JNIEnv*, jobject, jmethodID, va_list) CallObjectMethodV;
109     jobject function(JNIEnv*, jobject, jmethodID, jvalue*) CallObjectMethodA;
110     jboolean function(JNIEnv*, jobject, jmethodID, ...) CallBooleanMethod;
111     jboolean function(JNIEnv*, jobject, jmethodID, va_list) CallBooleanMethodV;
112     jboolean function(JNIEnv*, jobject, jmethodID, jvalue*) CallBooleanMethodA;
113     jbyte function(JNIEnv*, jobject, jmethodID, ...) CallByteMethod;
114     jbyte function(JNIEnv*, jobject, jmethodID, va_list) CallByteMethodV;
115     jbyte function(JNIEnv*, jobject, jmethodID, jvalue*) CallByteMethodA;
116     jchar function(JNIEnv*, jobject, jmethodID, ...) CallCharMethod;
117     jchar function(JNIEnv*, jobject, jmethodID, va_list) CallCharMethodV;
118     jchar function(JNIEnv*, jobject, jmethodID, jvalue*) CallCharMethodA;
119     jshort function(JNIEnv*, jobject, jmethodID, ...) CallShortMethod;
120     jshort function(JNIEnv*, jobject, jmethodID, va_list) CallShortMethodV;
121     jshort function(JNIEnv*, jobject, jmethodID, jvalue*) CallShortMethodA;
122     jint function(JNIEnv*, jobject, jmethodID, ...) CallIntMethod;
123     jint function(JNIEnv*, jobject, jmethodID, va_list) CallIntMethodV;
124     jint function(JNIEnv*, jobject, jmethodID, jvalue*) CallIntMethodA;
125     jlong function(JNIEnv*, jobject, jmethodID, ...) CallLongMethod;
126     jlong function(JNIEnv*, jobject, jmethodID, va_list) CallLongMethodV;
127     jlong function(JNIEnv*, jobject, jmethodID, jvalue*) CallLongMethodA;
128     jfloat function(JNIEnv*, jobject, jmethodID, ...) CallFloatMethod;
129     jfloat function(JNIEnv*, jobject, jmethodID, va_list) CallFloatMethodV;
130     jfloat function(JNIEnv*, jobject, jmethodID, jvalue*) CallFloatMethodA;
131     jdouble function(JNIEnv*, jobject, jmethodID, ...) CallDoubleMethod;
132     jdouble function(JNIEnv*, jobject, jmethodID, va_list) CallDoubleMethodV;
133     jdouble function(JNIEnv*, jobject, jmethodID, jvalue*) CallDoubleMethodA;
134     void function(JNIEnv*, jobject, jmethodID, ...) CallVoidMethod;
135     void function(JNIEnv*, jobject, jmethodID, va_list) CallVoidMethodV;
136     void function(JNIEnv*, jobject, jmethodID, jvalue*) CallVoidMethodA;
137     jobject function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualObjectMethod;
138     jobject function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualObjectMethodV;
139     jobject function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualObjectMethodA;
140     jboolean function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualBooleanMethod;
141     jboolean function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualBooleanMethodV;
142     jboolean function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualBooleanMethodA;
143     jbyte function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualByteMethod;
144     jbyte function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualByteMethodV;
145     jbyte function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualByteMethodA;
146     jchar function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualCharMethod;
147     jchar function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualCharMethodV;
148     jchar function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualCharMethodA;
149     jshort function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualShortMethod;
150     jshort function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualShortMethodV;
151     jshort function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualShortMethodA;
152     jint function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualIntMethod;
153     jint function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualIntMethodV;
154     jint function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualIntMethodA;
155     jlong function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualLongMethod;
156     jlong function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualLongMethodV;
157     jlong function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualLongMethodA;
158     jfloat function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualFloatMethod;
159     jfloat function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualFloatMethodV;
160     jfloat function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualFloatMethodA;
161     jdouble function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualDoubleMethod;
162     jdouble function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualDoubleMethodV;
163     jdouble function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualDoubleMethodA;
164     void function(JNIEnv*, jobject, jclass, jmethodID, ...) CallNonvirtualVoidMethod;
165     void function(JNIEnv*, jobject, jclass, jmethodID, va_list) CallNonvirtualVoidMethodV;
166     void function(JNIEnv*, jobject, jclass, jmethodID, jvalue*) CallNonvirtualVoidMethodA;
167     jfieldID function(JNIEnv*, jclass, const(char)*, const(char)*) GetFieldID;
168     jobject function(JNIEnv*, jobject, jfieldID) GetObjectField;
169     jboolean function(JNIEnv*, jobject, jfieldID) GetBooleanField;
170     jbyte function(JNIEnv*, jobject, jfieldID) GetByteField;
171     jchar function(JNIEnv*, jobject, jfieldID) GetCharField;
172     jshort function(JNIEnv*, jobject, jfieldID) GetShortField;
173     jint function(JNIEnv*, jobject, jfieldID) GetIntField;
174     jlong function(JNIEnv*, jobject, jfieldID) GetLongField;
175     jfloat function(JNIEnv*, jobject, jfieldID) GetFloatField;
176     jdouble function(JNIEnv*, jobject, jfieldID) GetDoubleField;
177     void function(JNIEnv*, jobject, jfieldID, jobject) SetObjectField;
178     void function(JNIEnv*, jobject, jfieldID, jboolean) SetBooleanField;
179     void function(JNIEnv*, jobject, jfieldID, jbyte) SetByteField;
180     void function(JNIEnv*, jobject, jfieldID, jchar) SetCharField;
181     void function(JNIEnv*, jobject, jfieldID, jshort) SetShortField;
182     void function(JNIEnv*, jobject, jfieldID, jint) SetIntField;
183     void function(JNIEnv*, jobject, jfieldID, jlong) SetLongField;
184     void function(JNIEnv*, jobject, jfieldID, jfloat) SetFloatField;
185     void function(JNIEnv*, jobject, jfieldID, jdouble) SetDoubleField;
186     jmethodID function(JNIEnv*, jclass, const(char)*, const(char)*) GetStaticMethodID;
187     jobject function(JNIEnv*, jclass, jmethodID, ...) CallStaticObjectMethod;
188     jobject function(JNIEnv*, jclass, jmethodID, va_list) CallStaticObjectMethodV;
189     jobject function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticObjectMethodA;
190     jboolean function(JNIEnv*, jclass, jmethodID, ...) CallStaticBooleanMethod;
191     jboolean function(JNIEnv*, jclass, jmethodID, va_list) CallStaticBooleanMethodV;
192     jboolean function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticBooleanMethodA;
193     jbyte function(JNIEnv*, jclass, jmethodID, ...) CallStaticByteMethod;
194     jbyte function(JNIEnv*, jclass, jmethodID, va_list) CallStaticByteMethodV;
195     jbyte function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticByteMethodA;
196     jchar function(JNIEnv*, jclass, jmethodID, ...) CallStaticCharMethod;
197     jchar function(JNIEnv*, jclass, jmethodID, va_list) CallStaticCharMethodV;
198     jchar function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticCharMethodA;
199     jshort function(JNIEnv*, jclass, jmethodID, ...) CallStaticShortMethod;
200     jshort function(JNIEnv*, jclass, jmethodID, va_list) CallStaticShortMethodV;
201     jshort function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticShortMethodA;
202     jint function(JNIEnv*, jclass, jmethodID, ...) CallStaticIntMethod;
203     jint function(JNIEnv*, jclass, jmethodID, va_list) CallStaticIntMethodV;
204     jint function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticIntMethodA;
205     jlong function(JNIEnv*, jclass, jmethodID, ...) CallStaticLongMethod;
206     jlong function(JNIEnv*, jclass, jmethodID, va_list) CallStaticLongMethodV;
207     jlong function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticLongMethodA;
208     jfloat function(JNIEnv*, jclass, jmethodID, ...) CallStaticFloatMethod;
209     jfloat function(JNIEnv*, jclass, jmethodID, va_list) CallStaticFloatMethodV;
210     jfloat function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticFloatMethodA;
211     jdouble function(JNIEnv*, jclass, jmethodID, ...) CallStaticDoubleMethod;
212     jdouble function(JNIEnv*, jclass, jmethodID, va_list) CallStaticDoubleMethodV;
213     jdouble function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticDoubleMethodA;
214     void function(JNIEnv*, jclass, jmethodID, ...) CallStaticVoidMethod;
215     void function(JNIEnv*, jclass, jmethodID, va_list) CallStaticVoidMethodV;
216     void function(JNIEnv*, jclass, jmethodID, jvalue*) CallStaticVoidMethodA;
217     jfieldID function(JNIEnv*, jclass, const(char)*, const(char)*) GetStaticFieldID;
218     jobject function(JNIEnv*, jclass, jfieldID) GetStaticObjectField;
219     jboolean function(JNIEnv*, jclass, jfieldID) GetStaticBooleanField;
220     jbyte function(JNIEnv*, jclass, jfieldID) GetStaticByteField;
221     jchar function(JNIEnv*, jclass, jfieldID) GetStaticCharField;
222     jshort function(JNIEnv*, jclass, jfieldID) GetStaticShortField;
223     jint function(JNIEnv*, jclass, jfieldID) GetStaticIntField;
224     jlong function(JNIEnv*, jclass, jfieldID) GetStaticLongField;
225     jfloat function(JNIEnv*, jclass, jfieldID) GetStaticFloatField;
226     jdouble function(JNIEnv*, jclass, jfieldID) GetStaticDoubleField;
227     void function(JNIEnv*, jclass, jfieldID, jobject) SetStaticObjectField;
228     void function(JNIEnv*, jclass, jfieldID, jboolean) SetStaticBooleanField;
229     void function(JNIEnv*, jclass, jfieldID, jbyte) SetStaticByteField;
230     void function(JNIEnv*, jclass, jfieldID, jchar) SetStaticCharField;
231     void function(JNIEnv*, jclass, jfieldID, jshort) SetStaticShortField;
232     void function(JNIEnv*, jclass, jfieldID, jint) SetStaticIntField;
233     void function(JNIEnv*, jclass, jfieldID, jlong) SetStaticLongField;
234     void function(JNIEnv*, jclass, jfieldID, jfloat) SetStaticFloatField;
235     void function(JNIEnv*, jclass, jfieldID, jdouble) SetStaticDoubleField;
236     jstring function(JNIEnv*, const(jchar)*, jsize) NewString;
237     jsize function(JNIEnv*, jstring) GetStringLength;
238     const(jchar)* function(JNIEnv*, jstring, jboolean*) GetStringChars;
239     void function(JNIEnv*, jstring, const(jchar)*) ReleaseStringChars;
240     jstring function(JNIEnv*, const(char)*) NewStringUTF;
241     jsize function(JNIEnv*, jstring) GetStringUTFLength;
242     const(char)* function(JNIEnv*, jstring, jboolean*) GetStringUTFChars;
243     void function(JNIEnv*, jstring, const(char)*) ReleaseStringUTFChars;
244     jsize function(JNIEnv*, jarray) GetArrayLength;
245     jobjectArray function(JNIEnv*, jsize, jclass, jobject) NewObjectArray;
246     jobject function(JNIEnv*, jobjectArray, jsize) GetObjectArrayElement;
247     void function(JNIEnv*, jobjectArray, jsize, jobject) SetObjectArrayElement;
248     jbooleanArray function(JNIEnv*, jsize) NewBooleanArray;
249     jbyteArray function(JNIEnv*, jsize) NewByteArray;
250     jcharArray function(JNIEnv*, jsize) NewCharArray;
251     jshortArray function(JNIEnv*, jsize) NewShortArray;
252     jintArray function(JNIEnv*, jsize) NewIntArray;
253     jlongArray function(JNIEnv*, jsize) NewLongArray;
254     jfloatArray function(JNIEnv*, jsize) NewFloatArray;
255     jdoubleArray function(JNIEnv*, jsize) NewDoubleArray;
256     jboolean* function(JNIEnv*, jbooleanArray, jboolean*) GetBooleanArrayElements;
257     jbyte* function(JNIEnv*, jbyteArray, jboolean*) GetByteArrayElements;
258     jchar* function(JNIEnv*, jcharArray, jboolean*) GetCharArrayElements;
259     jshort* function(JNIEnv*, jshortArray, jboolean*) GetShortArrayElements;
260     jint* function(JNIEnv*, jintArray, jboolean*) GetIntArrayElements;
261     jlong* function(JNIEnv*, jlongArray, jboolean*) GetLongArrayElements;
262     jfloat* function(JNIEnv*, jfloatArray, jboolean*) GetFloatArrayElements;
263     jdouble* function(JNIEnv*, jdoubleArray, jboolean*) GetDoubleArrayElements;
264     void function(JNIEnv*, jbooleanArray, jboolean*, jint) ReleaseBooleanArrayElements;
265     void function(JNIEnv*, jbyteArray, jbyte*, jint) ReleaseByteArrayElements;
266     void function(JNIEnv*, jcharArray, jchar*, jint) ReleaseCharArrayElements;
267     void function(JNIEnv*, jshortArray, jshort*, jint) ReleaseShortArrayElements;
268     void function(JNIEnv*, jintArray, jint*, jint) ReleaseIntArrayElements;
269     void function(JNIEnv*, jlongArray, jlong*, jint) ReleaseLongArrayElements;
270     void function(JNIEnv*, jfloatArray, jfloat*, jint) ReleaseFloatArrayElements;
271     void function(JNIEnv*, jdoubleArray, jdouble*, jint) ReleaseDoubleArrayElements;
272     void function(JNIEnv*, jbooleanArray, jsize, jsize, jboolean*) GetBooleanArrayRegion;
273     void function(JNIEnv*, jbyteArray, jsize, jsize, jbyte*) GetByteArrayRegion;
274     void function(JNIEnv*, jcharArray, jsize, jsize, jchar*) GetCharArrayRegion;
275     void function(JNIEnv*, jshortArray, jsize, jsize, jshort*) GetShortArrayRegion;
276     void function(JNIEnv*, jintArray, jsize, jsize, jint*) GetIntArrayRegion;
277     void function(JNIEnv*, jlongArray, jsize, jsize, jlong*) GetLongArrayRegion;
278     void function(JNIEnv*, jfloatArray, jsize, jsize, jfloat*) GetFloatArrayRegion;
279     void function(JNIEnv*, jdoubleArray, jsize, jsize, jdouble*) GetDoubleArrayRegion;
280     void function(JNIEnv*, jbooleanArray, jsize, jsize, const(jboolean)*) SetBooleanArrayRegion;
281     void function(JNIEnv*, jbyteArray, jsize, jsize, const(jbyte)*) SetByteArrayRegion;
282     void function(JNIEnv*, jcharArray, jsize, jsize, const(jchar)*) SetCharArrayRegion;
283     void function(JNIEnv*, jshortArray, jsize, jsize, const(jshort)*) SetShortArrayRegion;
284     void function(JNIEnv*, jintArray, jsize, jsize, const(jint)*) SetIntArrayRegion;
285     void function(JNIEnv*, jlongArray, jsize, jsize, const(jlong)*) SetLongArrayRegion;
286     void function(JNIEnv*, jfloatArray, jsize, jsize, const(jfloat)*) SetFloatArrayRegion;
287     void function(JNIEnv*, jdoubleArray, jsize, jsize, const(jdouble)*) SetDoubleArrayRegion;
288     jint function(JNIEnv*, jclass, const(JNINativeMethod)*, jint) RegisterNatives;
289     jint function(JNIEnv*, jclass) UnregisterNatives;
290     jint function(JNIEnv*, jobject) MonitorEnter;
291     jint function(JNIEnv*, jobject) MonitorExit;
292     jint function(JNIEnv*, JavaVM**) GetJavaVM;
293     void function(JNIEnv*, jstring, jsize, jsize, jchar*) GetStringRegion;
294     void function(JNIEnv*, jstring, jsize, jsize, char*) GetStringUTFRegion;
295     void* function(JNIEnv*, jarray, jboolean*) GetPrimitiveArrayCritical;
296     void function(JNIEnv*, jarray, void*, jint) ReleasePrimitiveArrayCritical;
297     const(jchar)* function(JNIEnv*, jstring, jboolean*) GetStringCritical;
298     void function(JNIEnv*, jstring, const(jchar)*) ReleaseStringCritical;
299     jweak function(JNIEnv*, jobject) NewWeakGlobalRef;
300     void function(JNIEnv*, jweak) DeleteWeakGlobalRef;
301     jboolean function(JNIEnv*) ExceptionCheck;
302     jobject function(JNIEnv*, void*, jlong) NewDirectByteBuffer;
303     void* function(JNIEnv*, jobject) GetDirectBufferAddress;
304     jlong function(JNIEnv*, jobject) GetDirectBufferCapacity;
305     jobjectRefType function(JNIEnv*, jobject) GetObjectRefType;
306 }
307 
308 struct _JNIEnv
309 {
310     const(JNINativeInterface)* functions;
311 }
312 
313 struct JNIInvokeInterface
314 {
315     void* reserved0;
316     void* reserved1;
317     void* reserved2;
318     jint function(JavaVM*) DestroyJavaVM;
319     jint function(JavaVM*, JNIEnv**, void*) AttachCurrentThread;
320     jint function(JavaVM*) DetachCurrentThread;
321     jint function(JavaVM*, void**, jint) GetEnv;
322     jint function(JavaVM*, JNIEnv**, void*) AttachCurrentThreadAsDaemon;
323 }
324 
325 struct _JavaVM
326 {
327     const(JNIInvokeInterface)* functions;
328 }
329 
330 struct JavaVMAttachArgs
331 {
332     jint version_;
333     const(char)* name;
334     jobject group;
335 }
336 
337 struct JavaVMOption
338 {
339     const(char)* optionString;
340     void* extraInfo;
341 }
342 
343 struct JavaVMInitArgs
344 {
345     jint version_;
346     jint nOptions;
347     JavaVMOption* options;
348     jboolean ignoreUnrecognized;
349 }
350 
351 struct _jfieldID;
352 struct _jmethodID;
353 
354 union jvalue
355 {
356     jboolean z;
357     jbyte b;
358     jchar c;
359     jshort s;
360     jint i;
361     jlong j;
362     jfloat f;
363     jdouble d;
364     jobject l;
365 }
366 
367 jint JNI_OnLoad(JavaVM* vm, void* reserved);
368 void JNI_OnUnload(JavaVM* vm, void* reserved);