⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dispatch.cpp

📁 jni java本地接口编程例子原代码,是java调用本地操作系统代码的接口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  (JNIEnv *env, jobject self, jint boff, jfloatArray arr, jint off, jint n){    jfloat *peer = (jfloat *)        env->GetLongField(self, FID_CPointer_peer);    env->GetFloatArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyIn * Signature: (I[III)V */JNIEXPORT void JNICALL Java_CPointer_copyIn__I_3III  (JNIEnv *env, jobject self, jint boff, jintArray arr, jint off, jint n){    jint *peer = (jint *)env->GetLongField(self, FID_CPointer_peer);    env->GetIntArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyIn * Signature: (I[JII)V */JNIEXPORT void JNICALL Java_CPointer_copyIn__I_3JII  (JNIEnv *env, jobject self, jint boff, jlongArray arr, jint off, jint n){    jlong *peer = (jlong *)env->GetLongField(self, FID_CPointer_peer);    env->GetLongArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyIn * Signature: (I[SII)V */JNIEXPORT void JNICALL Java_CPointer_copyIn__I_3SII  (JNIEnv *env, jobject self, jint boff, jshortArray arr, jint off, jint n){    jshort *peer = (jshort *)        env->GetLongField(self, FID_CPointer_peer);    env->GetShortArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyOut * Signature: (I[BII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3BII  (JNIEnv *env, jobject self, jint boff, jbyteArray arr, jint off, jint n){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    env->SetByteArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyOut * Signature: (I[CII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3CII  (JNIEnv *env, jobject self, jint boff, jcharArray arr, jint off, jint n){    jchar *peer = (jchar *)env->GetLongField(self, FID_CPointer_peer);    env->SetCharArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyOut * Signature: (I[DII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3DII  (JNIEnv *env, jobject self, jint boff, jdoubleArray arr, jint off, jint n){    jdouble *peer = (jdouble *)        env->GetLongField(self, FID_CPointer_peer);    env->SetDoubleArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyOut * Signature: (I[FII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3FII  (JNIEnv *env, jobject self, jint boff, jfloatArray arr, jint off, jint n){    jfloat *peer = (jfloat *)        env->GetLongField(self, FID_CPointer_peer);    env->SetFloatArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyOut * Signature: (I[III)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3III  (JNIEnv *env, jobject self, jint boff, jintArray arr, jint off, jint n){    jint *peer = (jint *)env->GetLongField(self, FID_CPointer_peer);    env->SetIntArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyOut * Signature: (I[JII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3JII  (JNIEnv *env, jobject self, jint boff, jlongArray arr, jint off, jint n){    jlong *peer = (jlong *)env->GetLongField(self, FID_CPointer_peer);    env->SetLongArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    copyOut * Signature: (I[SII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3SII  (JNIEnv *env, jobject self, jint boff, jshortArray arr, jint off, jint n){    jshort *peer = (jshort *)        env->GetLongField(self, FID_CPointer_peer);    env->SetShortArrayRegion(arr, off, n, peer + boff);}/* * Class:     CPointer * Method:    getByte * Signature: (I)B */JNIEXPORT jbyte JNICALL Java_CPointer_getByte  (JNIEnv *env, jobject self, jint index){    jbyte res;    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(&res, peer + index, sizeof(res));    return res;}/* * Class:     CPointer * Method:    getCPointer * Signature: (I)LCPointer; */JNIEXPORT jobject JNICALL Java_CPointer_getCPointer  (JNIEnv *env, jobject self, jint index){    void *ptr;    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(&ptr, peer + index, sizeof(ptr));    return makeCPointer(env, ptr);}/* * Class:     CPointer * Method:    getDouble * Signature: (I)D */JNIEXPORT jdouble JNICALL Java_CPointer_getDouble  (JNIEnv *env, jobject self, jint index){    jdouble res;    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(&res, peer + index, sizeof(res));    return res;}/* * Class:     CPointer * Method:    getFloat * Signature: (I)F */JNIEXPORT jfloat JNICALL Java_CPointer_getFloat  (JNIEnv *env, jobject self, jint index){    jfloat res;    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(&res, peer + index, sizeof(res));    return res;}/* * Class:     CPointer * Method:    getInt * Signature: (I)I */JNIEXPORT jint JNICALL Java_CPointer_getInt  (JNIEnv *env, jobject self, jint index){    jint res;    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(&res, peer + index, sizeof(res));    return res;}/* * Class:     CPointer * Method:    getLong * Signature: (I)J */JNIEXPORT jlong JNICALL Java_CPointer_getLong  (JNIEnv *env, jobject self, jint index){    jlong res;    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(&res, peer + index, sizeof(res));    return res;}/* * Class:     CPointer * Method:    getShort * Signature: (I)S */JNIEXPORT jshort JNICALL Java_CPointer_getShort  (JNIEnv *env, jobject self, jint index){    jshort res;    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(&res, peer + index, sizeof(res));    return res;}/* * Class:     CPointer * Method:    getString * Signature: (I)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_CPointer_getString  (JNIEnv *env, jobject self, jint index){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    return JNU_NewStringNative(env, (const char *)peer + index);}/* * Class:     CPointer * Method:    setByte * Signature: (IB)V */JNIEXPORT void JNICALL Java_CPointer_setByte  (JNIEnv *env, jobject self, jint index, jbyte value){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(peer + index, &value, sizeof(value));}/* * Class:     CPointer * Method:    setCPointer * Signature: (ILCPointer;)V */JNIEXPORT void JNICALL Java_CPointer_setCPointer  (JNIEnv *env, jobject self, jint index, jobject cptr){    void *ptr = (void *)env->GetLongField(cptr, FID_CPointer_peer);    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(peer + index, &ptr, sizeof(ptr));}/* * Class:     CPointer * Method:    setDouble * Signature: (ID)V */JNIEXPORT void JNICALL Java_CPointer_setDouble  (JNIEnv *env, jobject self, jint index, jdouble value){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(peer + index, &value, sizeof(value));}/* * Class:     CPointer * Method:    setFloat * Signature: (IF)V */JNIEXPORT void JNICALL Java_CPointer_setFloat  (JNIEnv *env, jobject self, jint index, jfloat value){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(peer + index, &value, sizeof(value));}/* * Class:     CPointer * Method:    setInt * Signature: (II)V */JNIEXPORT void JNICALL Java_CPointer_setInt  (JNIEnv *env, jobject self, jint index, jint value){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(peer + index, &value, sizeof(value));}/* * Class:     CPointer * Method:    setLong * Signature: (IJ)V */JNIEXPORT void JNICALL Java_CPointer_setLong  (JNIEnv *env, jobject self, jint index, jlong value){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(peer + index, &value, sizeof(value));}/* * Class:     CPointer * Method:    setShort * Signature: (IS)V */JNIEXPORT void JNICALL Java_CPointer_setShort  (JNIEnv *env, jobject self, jint index, jshort value){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    memcpy(peer + index, &value, sizeof(value));}/* * Class:     CPointer * Method:    setString * Signature: (ILjava/lang/String;)V */JNIEXPORT void JNICALL Java_CPointer_setString  (JNIEnv *env, jobject self, jint index, jstring value){    jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer);    char *str = JNU_GetStringNativeChars(env, value);    if (str == NULL) return;    strcpy((char *)peer + index, str);    free(str);}/********************************************************************//*		     Native methods of class CMalloc		    *//********************************************************************//* * Class:     CMalloc * Method:    malloc * Signature: (I)J */JNIEXPORT jlong JNICALL Java_CMalloc_malloc  (JNIEnv *env, jclass cls, jint size){    return (jlong)malloc(size);}/* * Class:     CMalloc * Method:    free * Signature: (J)V */JNIEXPORT void JNICALL Java_CMalloc_free  (JNIEnv *env, jobject self){    long peer = env->GetLongField(self, FID_CPointer_peer);    free((void *)peer);}/********************************************************************//*			   Utility functions			    *//********************************************************************//* Throw an exception by name */static void JNU_ThrowByName(JNIEnv *env, const char *name, const char *msg){    jclass cls = env->FindClass(name);    if (cls != 0) /* Otherwise an exception has already been thrown */        env->ThrowNew(cls, msg);    /* It's a good practice to clean up the local references. */    env->DeleteLocalRef(cls);}/* Translates a Java string to a C string using the String.getBytes  * method, which uses default local encoding. */static char *JNU_GetStringNativeChars(JNIEnv *env, jstring jstr){    jbyteArray hab = 0;    jthrowable exc;    char *result = 0;    hab = (jbyteArray)env->CallObjectMethod(jstr, MID_String_getBytes);    exc = env->ExceptionOccurred();    if (!exc) {        jint len = env->GetArrayLength(hab);        result = (char *)malloc(len + 1);	if (result == 0) {	    JNU_ThrowByName(env, "java/lang/OutOfMemoryError", 0);	    env->DeleteLocalRef(hab);	    return 0;	}	env->GetByteArrayRegion(hab, 0, len, (jbyte *)result);	result[len] = 0; /* NULL-terminate */    } else {        env->DeleteLocalRef(exc);    }    env->DeleteLocalRef(hab);    return result;}/* Constructs a Java string from a C array using the String(byte []) * constructor, which uses default local encoding. */static jstringJNU_NewStringNative(JNIEnv *env, const char *str){    jstring result;    jbyteArray hab = 0;    int len;    len = strlen(str);    hab = env->NewByteArray(len);    if (hab != 0) {        env->SetByteArrayRegion(hab, 0, len, (jbyte *)str);	result = (jstring)env->NewObject(Class_String,				   MID_String_init, hab);	env->DeleteLocalRef(hab);	return result;    }    return 0;}/* Canonicalize NULL pointers */static jobject makeCPointer(JNIEnv *env, void *p){    jobject obj;    if (p == NULL) {        return NULL;    }    obj = env->AllocObject(Class_CPointer);    if (obj) {        env->SetLongField(obj, FID_CPointer_peer, (jlong)p);    }    return obj;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -