°´Ã¼ÀÇ Çʵ忡 Á¢±ÙÇϱâ
FieldControl.java
public class FieldControl {
int int_a = 10;
double double_b = -1.2345;
static {
System.loadLibrary("control");
}
public native double add();
public static void main(String[] args) throws Exception {
double c = new FieldControl().add();
System.out.println("final result ==> a + b = " + c);
}
}
C:\20>javac FieldControl.java
C:\20>javah FieldControl
FieldContorl.c
#include <jni.h>
#include "FieldControl.h"
#include <stdio.h>
JNIEXPORT jdouble JNICALL Java_FieldControl_add (JNIEnv *env, jobject obj){
double c;
jclass class_fieldcontrol = (*env)->GetObjectClass(env, obj);
jfieldID id_a = (*env)->GetFieldID(env, class_fieldcontrol, "int_a", "I");
jint a = (*env)->GetIntField(env,obj,id_a);
jfieldID id_b = (*env)->GetFieldID(env, class_fieldcontrol, "double_b", "D");
jdouble b = (*env)->GetDoubleField(env,obj,id_b);
printf("a : %d \n", a);
printf("b : %f \n", b);
c= a+b;
printf("before ==> a + b = %f \n", a+b);
a += 5;
(*env)->SetIntField(env, obj, id_a, a);
b += 2.123;
(*env)->SetDoubleField(env, obj, id_b, b);
c= a+b;
printf("after ==> a + b = %f \n", a+b);
return c;
}
C\20>cl -Ic:\jdk1.3.1\include -Ic:\jdk1.3.1\include\win32 -LD FieldControl.c -Fecontrol.dll
FieldControl.c
/dll
/implib:control.lib
/out:control.dll
FieldControl.obj
Creating library control.lib and object control.exp
C:\20>java FieldControl
a : 10
b : -1.234500
before ==> a + b = 8.765500
after ==> a + b = 15.888500
final result ==> a + b = 15.8885
´Ù¸¥¾ð¾î¿¡¼ ÀÚ¹Ù°´Ã¼ÀÇ º¯¼ö°ªÀ» º¯°æÇÏ·Á¸é ÀÚ¹Ù°´Ã¼ÀÇ Å¸ÀÔ°ú º¯¼öÀÇ ½Äº°Á¤º¸ÀÎ º¯¼ö¸í°ú º¯¼öÇü, ±×¸®°í ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò°ªÀ» ¾Ë·ÁÁÖ¾î¾ßÇÕ´Ï´Ù.
GetObjectClass(env, obj) : ÀÚ¹Ù°´Ã¼ÀÇ ÂüÁ¶°ªÀ» ¹ÝȯÇÕ´Ï´Ù.
GetFieldID(env, class_fieldcontrol, "int_a", "I") : ÀÚ¹Ù°´Ã¼º¯¼öÀÇ À̸§°ú µ¥ÀÌÅÍÇü°ú ÂüÁ¶°ªÀ» ¹ÝȯÇÕ´Ï´Ù.
GetIntField(env,obj,id_a) : C¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÇüÀ¸·Î ¹ÝÈ¯ÇØÁÝ´Ï´Ù.
SetIntField(env, obj, id_a, a) : °´Ã¼º¯¼öÀÇ °ªÀ» º¯°æÇÕ´Ï´Ù.
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°Àº¹Ì´ÏÄÚµå ÀÛ¼ºÀÚ:Àںϸâ¹ö ±è´ë¼º |