registernativelibrary.cpp

来自「< Professional Java,JDK 5 Edition>」· C++ 代码 · 共 84 行

CPP
84
字号
// RegisterNativeLibrary.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "..\RegisterNativeExample.h"

jboolean JNICALL bubbleSort(JNIEnv *env, jobject obj, jintArray intArrayToSort)
{
    jint *intArray;
    jboolean isCopy;
    int i, j, num;

    intArray = env->GetIntArrayElements(intArrayToSort, &isCopy);

	if(intArray == NULL) {
         return(JNI_FALSE);
	}

	for(i=0; i<env->GetArrayLength(intArrayToSort)-1; i++) {
		for(j=i; j<env->GetArrayLength(intArrayToSort); j++) {
			if(intArray[i] > intArray[j]) {
				num = intArray[i];
				intArray[i] = intArray[j];
				intArray[j] = num;
			}
		}
	}

    env->ReleaseIntArrayElements(intArrayToSort, intArray, 0);
	return(JNI_TRUE);
}

jboolean JNICALL insertionSort(JNIEnv *env, jobject obj, jintArray intArrayToSort)
{
    jint *intArray;
    jboolean isCopy;
    int i, j, num;

    intArray = env->GetIntArrayElements(intArrayToSort, &isCopy);

	if(intArray == NULL) {
         return(JNI_FALSE);
	}

    for(i=1; i<env->GetArrayLength(intArrayToSort); i++) {
        num = intArray[i];

        for(j=i-1; j >= 0 && (intArray[j] > num); j--) {
            intArray[j+1] = intArray[j];
		}

        intArray[j+1] = num;
	}

    env->ReleaseIntArrayElements(intArrayToSort, intArray, 0);
	return(JNI_TRUE);
}

JNIEXPORT void JNICALL Java_RegisterNativeExample_setSort
  (JNIEnv *env, jobject obj, jint which)
{
     JNINativeMethod sortMethod;

     sortMethod.name = "sortNumbers";
     sortMethod.signature = "([I)Z";

     if(which == 1) {
          sortMethod.fnPtr = bubbleSort;
	 } else {
		 sortMethod.fnPtr = insertionSort;
	}

	 env->RegisterNatives(env->GetObjectClass(obj), &sortMethod, 1);
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

⌨️ 快捷键说明

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