Etienne Gagnon writes: > Andrew Haley wrote: > > Sure. Instead of putting a native pointer in a long or in a byte[], > > you just declare a class with a single field that contains the > > pointer. Everyone who needs a pointer makes a suitably named > > subclass, so they'll know what they're pointing to. > > How is that more efficient than a byte array?
It's a heck of a lot *better* than a byte array. Whether it's more efficient or not depends on the design of your VM. class SomeRandomLibraryClass { static { System.loadLibrary("SomeRandomJNILibrary"); } private RandomPointer extends nativePointer; private native RandomPointer initNativeData(...); private native void someNativeMethod(RandomPointer nativePointer, ...); public SomeRandomLibraryClass(...) { ... nativePointer = initNativeData(...); } public void someMethod(...) { someNativeMethod(nativePointer, ...) /** THE REAL CALL **/ } } In the C code, we'll have: > JNIEXPORT void JNICALL > Java_somepackage_someNativeMethod > (JNIEnv *env, jobject this, jbyteArray nativePointer, ...) > > { > void *ptr; > (*env)->GetByteArrayRegion(env, nativePointer, 0, sizeof(void *), (jbyte *) > &ptr); Danger, Will Robinson! This is not legal C!!!! You can *not* take the address of a pointer and cast it to a jbyte*. Try finding a legal way to do this. Andrew. _______________________________________________ Classpath mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/classpath