¿ì¸®´Â JNI°¡ Á¦°øÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇØ¼, ÀÚ¹Ù °´Ã¼°¡ °¡Áö°í ÀÖ´Â º¯¼öÀÇ °ªÀ» ´Ù¸¥ ¾ð¾î¿¡¼ º¯°æÇÒ ¼öµµ ÀÖ°í, ±× °ªÀ» ´Ù½Ã ÀÚ¹Ù·Î °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù.
ÀϹÝÀûÀ¸·Î ÀÚ¹Ù¿¡¼, °´Ã¼ÀÇ º¯¼ö¿¡ Á¢±ÙÇÏ·Á¸é ±× °´Ã¼ÀÇ À̸§°ú º¯¼öÀÇ À̸§À» ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ¸¶Âù°¡Áö·Î, Native Method ¿ª½Ã ÀÚ¹Ù °´Ã¼ÀÇ º¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ´Â ±× °´Ã¼ÀÇ Å¸ÀÔ°ú, º¯¼öÀÇ ½Äº° Á¤º¸¸¦ ÄÄÇ»ÅÍ¿¡ ÀνĽÃÄÑÁÙ Çʿ䰡 ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¸é, ÀÚ¹ÙÀÇ intÇü µ¥ÀÌÅÍ Å¸ÀÔÀÇ º¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ´Â, Native Method¿¡ ÀÚ¹ÙÀÇ °´Ã¼ ŸÀÔ(Ŭ·¡½º)°ú º¯¼öÀÇ ½Äº° Á¤º¸ÀÎ º¯¼öÀ̸§°ú º¯¼ö ŸÀÔÀ» ¾Ë·Á ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¾ð¶æ ÀÌÇØ°¡ °¡Áö ¾Ê°ÚÁö¸¸, ¾Æ·¡ÀÇ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸¸é ÀÌÇØ°¡ µÇ¸®¶ó »ý°¢µË´Ï´Ù.
´ÙÀ½Àº ÀÚ¹Ù¿¡¼ ¼±¾ðµÈ int¿Í doubleÇüÀÇ ¸â¹ö º¯¼ö µÎ°³¸¦ Native Method¸¦ ÅëÇØ¼ C¾ð¾î¿¡¼ ¹Þ¾Æ³»°í, ÀÌ º¯¼öµéÀ» º¯°æÇÏ¿© µµ½º ÄܼÖâ¿¡ Ãâ·ÂÇÏ°í ´Ù½Ã ÀÚ¹Ù·Î ±× °ªÀ» ¸®ÅϽÃŰ´Â ¿¹Á¦ÀÔ´Ï´Ù.
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:\JavaExample\20> javac JavaObject.java C:\JavaExample\20> javah JavaObject |
¸ÕÀú dllÆÄÀÏÀ» ¶óÀ̺귯¸®¿¡ ·Îµå½Ã۱â À§ÇÑ ÄÚµå´Â, ¾Õ¿¡¼¿Í °°ÀÌ ´ÙÀ½°ú °°½À´Ï´Ù.
n static {
n System.loadLibrary("control");
n }
±× ´ÙÀ½ Native Method¸¦ ¼±¾ðÇϴµ¥ ¹ÝȯµÇ´Â °ª¿¡ µû¶ó ±× ÇüÀ» double·Î ¼±¾ðÇØÁÖ¾ú½À´Ï´Ù.
n public native double add();
Native Method ³»ºÎ¿¡¼ ÀÚ¹Ù °´Ã¼ÀÇ º¯¼ö¿¡ Á¢±ÙÇÏ´Â °úÁ¤Àº ´ÙÀ½°ú °°ÀÌ ¼¼ ´Ü°è·Î ³ª´©¾î Áý´Ï´Ù.
n 1´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ ¾Ë¾Æ¿À±â
n 2´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ¿¡¼ºÎÅÍ, Á¢±ÙÇÏ·Á´Â º¯¼öÀÇ ½Äº° Á¤º¸¸¦ ¾Ë¾Æ¿À±â
n 3´Ü°è : º¯¼öÀÇ ½Äº° Á¤º¸¸¦ »ç¿ëÇØ¼, ¿øÇÏ´Â °´Ã¼ÀÇ ½ÇÁ¦ º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â
ÀÚ¹Ù¿¡¼ ³Ñ¾î¿À´Â °´Ã¼ÀÇ Å¸ÀÔÀº µÎ °¡Áö ¹æ¹ýÀ¸·Î ¾Ë ¼ö ÀÖ½À´Ï´Ù. ù¹øÂ° ¹æ¹ýÀº °´Ã¼·ÎºÎÅÍ ±× ŸÀÔÀ» ¾Ë¾Æ³»´Â ¹æ¹ýÀÔ´Ï´Ù. ¸ðµç Native Method°¡ ù¹øÂ° ¸Å°³ º¯¼ö·Î env ¶ó´Â ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ °®´Â´Ù´Â °ÍÀº ¾ÕÀÇ Àý¿¡¼ ¾ð±ÞÇß¾ú½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍ¿Í ÇÔ²² ¸ðµç Native Method¿¡°Ô ÁÖ¾îÁö´Â ¶Ç ÇϳªÀÇ ¸Å°³ º¯¼ö°¡ ÀÖ½À´Ï´Ù. ¹Ù·Î jobject ŸÀÔÀÇ obj¶ó´Â ¸Å°³ º¯¼ö ÀÔ´Ï´Ù. ¸ðµç ÀÚ¹ÙÀÇ °´Ã¼´Â jobject¶ó´Â JNI°¡ ¹Ì¸® Á¤ÀÇÇØ ³õÀº ŸÀÔÀ¸·Î Ç¥ÇöµË´Ï´Ù. Native Method¿¡°Ô ÀÚµ¿À¸·Î ³Ñ°ÜÁö´Â obj´Â »ç½ÇÀº Native Method¸¦ ¼±¾ðÇÑ Å¬·¡½ºÀÇ °´Ã¼ ÀÚ½Å(this)ÀÔ´Ï´Ù. HelloWorld ¿¹Á¦ÀÇ °æ¿ì¶ó¸é HelloWorld °´Ã¼ ÀÚ½ÅÀÌ µÇ°Ú±º¿ä. ´ÙÀ½ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇØ¼ obj·ÎºÎÅÍ °´Ã¼ÀÇ Å¸ÀÔÀ» ¾Ë¾Æ ³¾ ¼ö ÀÖ½À´Ï´Ù. ±× ¿ø¸®´Â ¸®Ç÷º¼Ç ¿¡¼ getClass()¸Þ¼µå¸¦ ÀÌ¿ëÇØ¼ Ŭ·¡½ºÀÇ Á¤º¸¸¦ Ŭ·¡½º·Î´õ¿¡°Ô ¾Ë·ÁÁÖ´Â °Í°ú ¶È°°½À´Ï´Ù.
n jclass GetObjectClass(JNIEnv* env, jobject obj)
GetObjectClass()°¡ ¹ÝȯÇÏ´Â jclass´Â Sun»ç°¡ ÀÚ¹Ù¿¡¼ÀÇ °´Ã¼ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» Ç¥ÇöÇϱâ À§ÇØ jni.h¿¡ Á¤ÀÇÇØ ³õÀº ŸÀÔÀÔ´Ï´Ù. Çѹø JDK¿¡ ÀÖ´Â include Æú´õ¸¦ ¿¾î ¡°jni.h¡±¸¦ È®ÀÎÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.
±×¸² 20-5 ÀÚ¹ÙÀÇ °´Ã¼¿Í Ŭ·¡½º¸¦ Ç¥ÇöÇϱâ À§ÇØ JNI¿¡¼ Á¤ÀÇµÈ Å¸ÀÔµé
´ÙÀ½Àº ÀÚ¹ÙÀÇ °´Ã¼¸É¹ö¸¦ Á¶ÀÛÇÏ´Â CÄÚµåÀÔ´Ï´Ù.
FieldControl.c(ÀÚ¹ÙÀÇ ¸É¹öº¯¼ö¸¦ Á¶ÀÛÇÏ´Â 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:\JavaExample\20>cl -Ic:\jdk1.3.1\include -Ic:\jdk1.3.1\include\win32 -LD F ieldControl.c -Fecontrol.dll ¡¦¡¦ FieldControl.c ¡¦¡¦ /dll /implib:control.lib /out:control.dll FieldControl.obj Creating library control.lib and object control.exp C:\JavaExample\object>java FieldControl a : 10 b : -1.234500 before ==> a + b = 8.765500 after ==> a + b = 15.888500 final result ==> a + b = 15.8885 |
À§ ¿¹Á¦ÀÇ °æ¿ì, ÀÚ¹Ù °´Ã¼ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÎ jclass´Â ´ÙÀ½Ã³·³ ¾ò¾î¿É´Ï´Ù.
n jclass class_fieldcontrol = (*env)->GetObjectClass(env, obj);
GetObjectClass()¸Þ¼µå´Â ¸Å°³ º¯¼ö·Î ÁÖ¾îÁø jobjectÀÇ Å¬·¡½º¸¦ jclass ÇüÅ·Π¹ÝÈ¯ÇØ ÁÖ´Â ÇÔ¼ö ÀÔ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á, ÀÚ¹Ù¿¡¼ »ý¼ºµÈ °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ÂüÁ¶°ªÀ» jclassÀÇ °´Ã¼ class_fieldcontrol¿¡°Ô ³Ñ°ÜÁÖ´Â °ÍÀÔ´Ï´Ù. ¹°·Ð ÀÌ·¸°Ô ÇØÁÖ´Â ÀÌÀ¯´Â °£´ÜÇÕ´Ï´Ù. ÀÚ¹Ù¿Í C¾ð¾îÀÇ È¯°æÀÌ ´Ù¸£±â ¶§¹®ÀÌÁö¿ä. Áö±ÝÀÇ °úÁ¤µéÀ» ÀÌ·¸°Ô »ý°¢Çϸé ÀÌÇØ°¡ ºü¸£°Ú³×¿ä. ÀÚ¹ÙÀÇ ÂüÁ¶°ªµéÀ» C¾ð¾î°¡ ÂüÁ¶ÇÒ ¼ö ÀÖ°Ô²û C¾ð¾îÀÇ ÂüÁ¶°ªµé·Î º¯È¯ÇÏ¿© ÁÖ´Â °úÁ¤À̶ó°í¡¦.
°´Ã¼ÀÇ ÂüÁ¶°ªÀ» ¾Ë¾Æ³Â±â ¶§¹®¿¡ ¿ì¸®´Â ±× ÂüÁ¶°ªÀ» ±Ù°Å·Î °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. °´Ã¼ ¾È¿¡´Â ¸â¹öµéÀÇ ÂüÁ¶°ªµéÀÌ µé¾î ÀÖ½À´Ï´Ù. ±×·¡¼ ¿ì¸®´Â °´Ã¼ÀÇ ¸â¹ö¿¡ Á¢±ÙÇÏ·Á ÇÒ ¶§¿¡ °´Ã¼¿¡ Á¡(.) Âï°í Á¢±ÙÇÒ ¼ö ÀÖ¾ú´ø °ÍÀÔ´Ï´Ù. À̰ÍÀÌ ¹Ù·Î C¾ð¾îÀÇ Æ÷ÀÎÅÍ °³³äÀÌÁö¿ä. ´ÙÀ½Àº °´Ã¼ÀÇ ÂüÁ¶°ªÀ» ÂüÁ¶ÇÏ¿© °´Ã¼¸â¹ö¿¡ Á¢±ÙÇÏ·Á ÇÕ´Ï´Ù.
n jfieldID id_a = (*env)->GetFieldID(env, class_fieldcontrol, "int_a", "I");
n jfieldID id_b = (*env)->GetFieldID(env, class_fieldcontrol, "double_b", "D");
À§ Äڵ忡¼´Â ¸â¹öº¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ GetFieldID()¸Þ¼µå¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. GetFieldID()´Â °´Ã¼º¯¼öÀÇ ÂüÁ¶°ªÀ» ¾Ë¾Æ ³»´Â ¸Þ¼µåÀÔ´Ï´Ù. ¿©±â¼ °ü½ÉÀ» ±â¿ï¿©¾ß ÇÏ´Â ºÎºÐÀº °´Ã¼ÀÇ ¸â¹öº¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ °´Ã¼ÀÇ ÂüÁ¶°ª(class_fieldcontrol)À» GetFieldID()¸Þ¼µåÀÇ ÀÎÀÚ·Î ÁÖ´Â ºÎºÐÀÔ´Ï´Ù. ¡®int_a¡¯¶ó´Â ÀÎÀÚ´Â ÀÚ¹Ù¿¡¼ÀÇ °´Ã¼ ¸â¹öÇʵåÀÇ À̸§ÀÔ´Ï´Ù. ¡®I¡¯´Â ÀÚ¹Ù¿¡¼ ³Ñ¾î¿Ã ¸â¹öº¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» C¾ð¾î¿¡ ¹Ì¸® ±Í¶äÇØ Áִ ǥ½ÃÀÔ´Ï´Ù.
´ÙÀ½Àº °´Ã¼¸â¹öº¯¼öÀÇ ÂüÁ¶°ªÀ» ¾Ë¾Æ ³ÂÀ¸¸é GetIntField()¸Þ¼µå¸¦ »ç¿ëÇÏ¿©, ±× º¯¼ö¸¦ C¾ð¾î¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î º¯È¯ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. Âü º¯È¯ÇÏ´Â °Íµµ ¸¹Áö¿ä? ÀÌ·± ÀÏ·ÃÀÇ °úÁ¤À» ¸¶ÃÄ¾ß ºñ·Î¼ C¾ð¾î¿¡¼ »ç¿ë °¡´ÉÇÑ ÇϳªÀÇ º¯¼ö°¡ µÇ´Â °ÍÀÔ´Ï´Ù.
n jint a = (*env)->GetIntField(env, obj, id_a);
n jdouble b = (*env)->GetDoubleField(env,obj,id_b);
À§ÀÇ ÄÚµå´Â GetIntField()¶ó´Â ¸Þ¼µå¿¡ °´Ã¼º¯¼öÀÇ ÂüÁ¶°ªÀ» ÀÎÀÚ·Î ³Ñ°Ü C¾ð¾î¿¡¼ »ç¿ë °¡´ÉÇÑ ¡®jint¡¯¶ó´Â µ¥ÀÌÅÍ Å¸ÀÔÀÇ °´Ã¼ ¡®a¡¯¸¦ »ý¼ºÇϰí ÀÖ½À´Ï´Ù. ÀÌ ¶§ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀº ÀÚ¹Ù °´Ã¼ÀÇ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ µû¶ó ´Þ¶óÁö°í, ¸Þ¼µåÀÇ ÇüÅ ¶ÇÇÑ ´Þ¶óÁö´Ï ÁÖÀÇ ÇϽñ⠹ٶø´Ï´Ù.
¹°·Ð Ç¥ÁØ C¾ð¾î¿¡´Â jint¶ó´Â µ¥ÀÌÅÍ Å¸ÀÔÀº ¾ø½À´Ï´Ù. Sun»ç¿¡¼ ÀÓÀÇÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¸µé¾î Çì´õ ÆÄÀÏ¿¡ Á¤ÀÇÇØ ³õ°í, ±×°ÍÀ» ÀÚ¹Ù¿¡ ³¢¿ö³ÖÀº °ÍÀÌÁö¿ä. ±×·¡¼ »ç¿ë °¡´ÉÇÑ µ¥ÀÌÅÍ Å¸ÀÔµéÀÔ´Ï´Ù. ±× Çì´õ ÆÄÀÏÀÌ ¹Ù·Î C¿¡¼ Ç×»ó include½ÃŰ´Â <jni.h>À̰í, <jni.h>¸¦ È®ÀÎÇØ º¸¸é ´Ù½Ã "jni_md.h"¸¦ include½Ã۰í ÀÖ½À´Ï´Ù. ±×·¡¼ ¿ì¸®´Â ÄÄÆÄÀÏÇÒ ¶§¸¶´Ù Ç×»ó ÀÌ µÎ Çì´õ ÆÄÀϵéÀÇ °æ·Î¸¦ ¸í½ÃÇÏ´Â °ÍÀÔ´Ï´Ù. ¿Ö³ÄÇÏ¸é µÎ Çì´õ ÆÄÀϵéÀÌ C ÆÄÀϰú °°Àº Æú´õ¿¡ ÀÖÁö ¾ÊÀ¸´Ï±î ÄÄÇ»ÅÍ¿¡°Ô ¾Ë·ÁÁÖ´Â °ÍÀÔ´Ï´Ù.
ÀÌÁ¦ °´Ã¼º¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔ±îÁö Á¤ÇØÁ³À¸´Ï, ¿ì¸®´Â ÀÌ º¯¼öµéÀ» C¿¡¼ SetIntField()¸Þ¼µå·Î ¸¶À½´ë·Î Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼´Â ´Ü¼øÈ÷ 5¸¸À» ´õÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¸Þ¼µå¸¦ »ç¿ëÇÒ ¶§¿¡µµ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ µû¶ó ¸Þ¼µåÀÇ ÇüŰ¡ ´Þ¶óÁý´Ï´Ù.
n (*env)->SetIntField(env, obj, id_a, a);
n (*env)->SetDoubleField(env, obj, id_b, b);
°´Ã¼ÀÇ Å¸ÀÔÀÎ jclass¸¦ ¾Ë¾Æ³»±â À§ÇÑ ¶Ç ´Ù¸¥ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ FindClass()ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ¸í½ÃÀûÀ¸·Î Ŭ·¡½ºÀÇ À̸§À» Á¦°øÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
n jclass class_string = (*env)->FindClass(env, ¡°java/lang/String¡±);
ÀÌ ¹æ¹ýÀº static º¯¼ö¸¦ °¡Á®¿Ã ¶§ ÁÖ·Î »ç¿ëµË´Ï´Ù.
º¯¼ö°¡ ¼ÓÇØÀÖ´Â °´Ã¼ÀÇ Å¸ÀÔÀ» ¾Ë¾Æ ³ÂÀ¸¸é, ±× °´Ã¼ÀÇ Å¸ÀÔ¿¡¼ ¿ì¸®°¡ ¿øÇÏ´Â º¯¼ö´Â ¾î¶² °ÍÀÎÁö Native Method¿¡°Ô ¾Ë·ÁÁÖ±â À§Çؼ, Ŭ·¡½º·ÎºÎÅÍ º¯¼öÀÇ ½Äº° Á¤º¸¸¦ ¾ò¾î¿Í¾ß ÇÕ´Ï´Ù. º¯¼öÀÇ ½Äº° Á¤º¸´Â jfieldID¶ó°í ÇÏ´Â JNI°¡ ¹Ì¸® Á¤ÀÇÇÑ Å¸ÀÔÀ» »ç¿ëÇÕ´Ï´Ù.
º¯¼öÀÇ ½Äº° Á¤º¸´Â À§¿¡¼¿Í °°ÀÌ GetFieldID¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ¾ò¾î¿Ã ¼ö ÀÖ½À´Ï´Ù.
n jclass class_fieldcontrol = (*env)->GetObjectClass(env, obj);
GetFieldID()¸Þ¼µå |
JfieldID GetFieldID (JNIEnv* env, jclass cls, const char name[], const char signal[]) : ÁÖ¾îÁø jclass ¿¡¼ ƯÁ¤ÇÑ À̸§°ú ŸÀÔÀ» °®´Â Çʵ带 °¡Á®¿É´Ï´Ù. ¹ÝȯµÇ´Â °ªÀº ÀÚ¹Ù°´Ã¼ÀÇ ÂüÁ¶°ªÀÌ ÀÔ´Ï´Ù. jclass cls : Class °´Ã¼ const char name[] : ÇʵåÀÇ À̸§ const char signal[] : ÇʵåÀÇ Å¸ÀÔ ½Äº°ÀÚ |
Àü ´Ü°è¿¡¼ ¾ò¾î¿Â class_fieldcontrolÀÇ ¸â¹ö º¯¼öµé Áß¿¡¼ À̸§ÀÌ ¡°int_a¡±À̰í, µ¥ÀÌÅÍ Å¸ÀÔÀÌ intÀÎ º¯¼öÀÇ ½Äº°Á¤º¸¸¦ °¡Á®¿É´Ï´Ù. ÀÚ¹ÙÀÇ Å¸ÀÔÀ» Ç¥ÇöÇϱâ À§ÇØ ´ÙÀ½ Ç¥¿¡ Á¤ÀǵǾî ÀÖ´Â °ªÀ» »ç¿ëÇÕ´Ï´Ù.
Signature |
Java Programming
Language Type |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fully-qualified-class |
|
type |
|
method type |
Ç¥ 20-2 ÀÚ¹ÙÀÇ Å¸ÀÔÀ» Ç¥ÇöÇϱâ À§ÇØ Á¤ÀÇµÈ °ª
Ç¥¸¦ ÂüÁ¶ÇØ º¸¸é, int´Â ¡°I¡±·Î Á¤ÀÇ µÇ¾îÀÖ½À´Ï´Ù. Ŭ·¡½ºÀÇ °æ¿ì¿¡´Â ¾à°£ ƯÀÌÇÑ ·êÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¿ì¼± ÆÐŰÁö¸¦ Æ÷ÇÔÇÑ Å¬·¡½ºÀÇ ÀüüÀ̸§À» ¡®.¡¯ ±¸ºÐÀÚ ´ë½Å ¡®/¡¯ ±¸ºÐÀÚ¸¦ »ç¿ëÇØ¼ ¹Ù²ãÁÖ°í Á¦ÀÏ ¾Õ¿¡´Â ¡®L¡¯À», Ŭ·¡½º À̸§ÀÇ ¸¶Áö¸·Àº ¡®;¡¯À» ºÙ¿© ÁÝ´Ï´Ù. ¿¹¸¦ µé¸é, ¡°java.lang.String¡±Àº ¡°Ljava/lang/String;¡± ó·³ ¹Ù²ò´Ï´Ù. ¸Þ¼µå ŸÀÔÀº ´ÙÀ½ Àý¿¡¼ ÀÚ¼¼È÷ ¼³¸í ÇϰڽÀ´Ï´Ù.
°´Ã¼ÀÇ Å¸ÀÔ°ú º¯¼öÀÇ ½Äº°Á¤º¸¸¦ ¸ðµÎ ±¸ÇßÀ¸¸é, ½ÇÁ¦·Î º¯¼ö¸¦ Á¶ÀÛÇÏ´Â Àϸ¸ ³²¾Ò½À´Ï´Ù. JNI´Â º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â À§ÇØ ´ÙÀ½°ú °°Àº ÀÏ·ÃÀÇ ÇÔ¼öµéÀ» Á¦°øÇÕ´Ï´Ù.
Set/Get<type>Field |
Set/GetBooleanField Set/GetByteField Set/GetCharField Set/GetDoubleField Set/GetFloatField Set/GetIntField Set/GetLongField Set/GetObjectField Set/GetShortField |
Ç¥ 20-3 º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â À§ÇØ JNI¿¡¼ Á¦°øÇÏ´Â ÇÔ¼ö
static º¯¼ö¿¡ Á¢±ÙÇÏ´Â °æ¿ì¿¡´Â, ¸ÕÀú FindClass()ÇÔ¼ö¸¦ »ç¿ëÇØ¼ Ŭ·¡½º¸¦ ¾ò¾î¿À°í, µÎ ¹øÂ° ´Ü°è¿¡¼ GetFieldID()ÇÔ¼ö ´ë½Å GetStaticFieldID()¸¦ »ç¿ëÇØ¼ º¯¼öÀÇ ½Äº° Á¤º¸¸¦ ¾ò¾î¿À°í, ¸¶Áö¸· ´Ü°è¿¡¼´Â Set/GetStatic<type>Field()ÇÔ¼ö·Î º¯¼ö¸¦ Á¶ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.
Static º¯¼ö¸¦ Á¶ÀÛÇÏ´Â ¿¹ |
¡¦ jclass class_system = (*env)->FindClasS(env, "java/lang/System"); jfieldID id_out = (*env)->GetStaticFieldID(env, class_system, "out", "Ljava/io/PrintStream;"); jobject obj_out = (*env)->GetStaticObjectField(env, class_system, id_out); ¡¦ |
¢Ñ ÀÚ¹Ù °´Ã¼ÀÇ Çʵå Á¢±ÙÇϱâ |
´ÙÀ½ÀÇ ÀýÂ÷¸¦ µû¸¨´Ï´Ù l 1´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ(jclass) ¾Ë¾Æ¿À±â l 2´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ¿¡¼ºÎÅÍ, Á¢±ÙÇÏ·Á´Â º¯¼öÀÇ ½Äº° Á¤º¸(jfieldID)¸¦ ¾Ë¾Æ¿À±â l 3´Ü°è : º¯¼öÀÇ ½Äº° Á¤º¸¸¦ »ç¿ëÇØ¼, ¿øÇÏ´Â °´Ã¼ÀÇ ½ÇÁ¦ º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â |
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù4ºÎ ÀúÀÚ:ÃÖ¿µ°ü |