¼Ò¼³ java.jni ¼Ò½ºÄڵ堠°´Ã¼ÀÇ Çʵ忡 Á¢±Ù  °´Ã¼ÀÇÇʵ忡Á¢±ÙÇϱ⠠

°´Ã¼ÀÇ Çʵ忡 Á¢±ÙÇϱâ

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ÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°Àº¹Ì´ÏÄÚµå
ÀÛ¼ºÀÚ:Àںϸâ¹ö ±è´ë¼º