[HelloWorld.java]
/*
* Created on 2004. 12. 31.
* File name : HelloWorld.java
* @author DaeGon Kim
*
*/
public class HelloWorld {
String greeting = "Hello Java World";
public native void display();
public static void main(String[] args) {
HelloWorld hw = new HelloWorld()
System.out.println(hw.greeting);
hw.display();
System.out.println(hw.greeting);
}
static {
System.load("D:\\Project\\Java\\hello.dll");
}
}
[HelloWorld.h]
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: display
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_display
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
[HelloWorld.c]
#include
#include "HelloWorld.h"
#include
JNIEXPORT void JNICALL Java_HelloWorld_display(JNIEnv *env, jobject this) {
jfieldID fldid;
jstring greeting;
const char *temp;
// 넘겨지는 객체 this의 클래스를 가져온다.
jclass instance = (*env)->GetObjectClass(env,this);
printf(" Start of C implementation.\n");
if ( this == NULL ) {
fprintf(stderr, "Input pointer is null!");
return;
}
// 클래스 안에서 greeting이라는 속성이 가진 위치를 가져온다.
fldid = (*env)->GetFieldID(env, instance, "greeting", "Ljava/lang/String;");
if ( fldid == NULL ) {
fprintf(stderr, "Failed to get the field id\n");
return;
}
// 실제 객체에서 fldid에 있는 값을 읽어온다.
greeting = (*env)->GetObjectField(env, this, fldid);
// 일어온 값을 C 데이터로 변환한다.
temp = (*env)->GetStringUTFChars(env, greeting, NULL);
printf(" %s \n", temp);
// 자바의 String 필드에 저장할 값을 만든다.
greeting = (*env)->NewStringUTF(env, "Hello C World");
if ( greeting == NULL ) {
printf("Out of memory\n");
return;
}
// greeting에 저정돤 값을 자바 객체로 전달한다.
(*env)->SetObjectField(env, this, fldid, greeting);
printf(" End of C implementation \n");
return;
}
Hello Java World
Start of C implementation.
Hello Java World
End of C implementation
Hello C World
[Sort.c]
#include
#include
int *sortIntegers(int *A, int n) {
int i = 0;
int j = 0;
int key = 0;
for ( j=1; j < n ; j++ ) {
key = A[j];
i = j - 1;
while ( i >=0 && A[i] > key ) {
A[i+1] = A[i];
i--;
}
A[i+1] = key;
}
return A;
}
[Sort.h]
int *sortIntegers(int *A, int n);
[Sorting.java]
public class Sorting {
public static native int[] sort(int[] A, int n);
public static void main(String args[]) {
int Input[] = {3,4,7,2,5,6,9,11,1,8,10};
int sorted[] = sort(Input, Input.length);
for (int i=0; i < sorted.length ; i++ ) {
System.out.println("A[" + i + "] = " + sorted[i] );
}
}
static {
System.load("D:\\Project\\Java\\sorting.dll");
}
}
[Sorting.c]
#include
#include "Sorting.h"
#include "Sort.h"
#include
JNIEXPORT jintArray JNICALL Java_Sorting_sort(JNIEnv *env, jclass cl, jintArray arr, jint n) {
jint *A = NULL;
jintArray temp = NULL;
A = (*env)->GetIntArrayElements(env, arr, NULL);
if ( A == NULL ) {
fprintf(stderr, "Failed to get int array\n");
return arr;
}
A = sortIntegers(A, n);
temp = (*env)->NewIntArray(env, n);
(*env)->ReleaseIntArrayElements(env, temp, A, 0);
return temp;
}
이전 글 : 성능 데이터 모델링 - 정규화를 통한 성능 향상
최신 콘텐츠