°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
¡¡¡¡¡¡¡¡app¡£changeObject£¨anObj£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Java£º¡¡¡¨¡¡£«¡¡anObj¡£aValue£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡private¡¡native¡¡void¡¡¡¡¡¡
¡¡¡¡changeObject£¨MyJavaClass¡¡obj£©£»¡¡¡¡
¡¡¡¡static¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£loadLibrary£¨¡¨UseObjImpl¡¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
±àÒëºÃ´úÂ룬²¢½«¡£class¡¡Îļþ´«µÝ¸ø¡¡javah¡¡ºó£¬¾Í¿ÉÒÔʵÏÖ¹ÌÓз½·¨¡£ÔÚÏÂÃæÕâ¸öÀý×ÓÖУ¬Ò»µ©È¡µÃ×ֶκ͡¡
·½·¨¡¡ID£¬¾Í»áͨ¹ý¡¡JNI¡¡º¯Êý·ÃÎÊËüÃÇ¡£¡¡¡¡
¡¡¡¡
JNIEXPORT¡¡void¡¡JNICALL¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡653¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡655¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Java_UseObjects_changeObject£¨¡¡¡¡
¡¡¡¡JNIEnv¡¡*¡¡env£»¡¡jobject¡¡jThis£»¡¡jobject¡¡obj£©¡¡£û¡¡¡¡
¡¡¡¡jclass¡¡cls£»¡¡¡¡
¡¡¡¡jfieldID¡¡fid£»¡¡¡¡
¡¡¡¡jmethodID¡¡mid£»¡¡¡¡
¡¡¡¡int¡¡value£»¡¡¡¡
¡¡¡¡cls¡¡=¡¡env¡¡·GetObjectClass£¨obj£©£»¡¡¡¡
¡¡¡¡fid¡¡=¡¡env¡¡·GetFieldID£¨cls£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨aValue¡¨£»¡¡¡¨I¡¨£©£»¡¡¡¡
¡¡¡¡mid¡¡=¡¡env¡¡·GetMethodID£¨cls£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨divByTwo¡¨£»¡¡¡¨£¨£©V¡¨£©£»¡¡¡¡
¡¡¡¡value¡¡=¡¡env¡¡·GetIntField£¨obj£»¡¡fid£©£»¡¡¡¡
¡¡¡¡printf£¨¡¨Native£º¡¡£¥dn¡¨£»¡¡value£©£»¡¡¡¡
¡¡¡¡env¡¡·SetIntField£¨obj£»¡¡fid£»¡¡6£©£»¡¡¡¡
¡¡¡¡env¡¡·CallVoidMethod£¨obj£»¡¡mid£©£»¡¡¡¡
¡¡¡¡value¡¡=¡¡env¡¡·GetIntField£¨obj£»¡¡fid£©£»¡¡¡¡
¡¡¡¡printf£¨¡¨Native£º¡¡£¥dn¡¨£»¡¡value£©£»¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
³ýµÚÒ»¸ö×Ô±äÁ¿Í⣬C£«£«º¯Êý»á½ÓÊÕÒ»¸ö¡¡jobject£¬Ëü´ú±íJava¡¡¶ÔÏóÒýÓá°¹ÌÓС±µÄÄÇÒ»Ã桪¡ªÄǸöÒýÓÃÊÇ¡¡
ÎÒÃÇ´Ó¡¡Java¡¡´úÂëÀï´«µÝµÄ¡£ÎÒÃǼòµ¥µØ¶ÁÈ¡¡¡aValue£¬°ÑËü´òÓ¡³öÀ´£¬¸Ä±äÕâ¸öÖµ£¬µ÷ÓöÔÏóµÄdivByTwo£¨£©¡¡
·½·¨£¬ÔÙ½«ÖµÖØдòÓ¡Ò»±é¡£¡¡¡¡
Ϊ·ÃÎÊÒ»¸ö×ֶλò·½·¨£¬Ê×ÏȱØÐë»ñÈ¡ËüµÄ±êʶ·û¡£ÀûÓÃÊʵ±µÄJNI¡¡º¯Êý£¬¿É·½±ãµØÈ¡µÃÀà¶ÔÏó¡¢ÔªËØÃûÒÔ¡¡
¼°Ç©ÃûÐÅÏ¢¡£ÕâЩº¯Êý»á·µ»ØÒ»¸ö±êʶ·û£¬ÀûÓÃËü¿É·ÃÎʶÔÓ¦µÄÔªËØ¡£¾¡¹ÜÕâÒ»·½Ê½ÏÔµÃÓÐЩÇúÕÛ£¬µ«ÎÒÃÇ¡¡
µÄ¹ÌÓз½·¨È·Êµ¶ÔJava¡¡¶ÔÏóµÄÄÚ²¿²¼¾ÖÒ»ÎÞËùÖª¡£Òò´Ë£¬Ëü±ØÐëͨ¹ýÓÉ¡¡JVM¡¡·µ»ØµÄË÷Òý·ÃÎÊ×ֶκͷ½·¨¡£Õâ¡¡
ÑùÒ»À´£¬²»Í¬µÄJVM¡¡¾Í¿ÉʵÏÖ²»Í¬µÄÄÚ²¿¶ÔÏó²¼¾Ö£¬Í¬Ê±²»»á¶Ô¹ÌÓз½·¨Ôì³ÉÓ°Ïì¡£¡¡¡¡
ÈôÔËÐС¡Java¡¡³ÌÐò£¬¾Í»á·¢ÏÖ´Ó¡¡Java¡¡ÄÇÒ»²à´«À´µÄ¶ÔÏóÊÇÓÉÎÒÃǵĹÌÓз½·¨´¦ÀíµÄ¡£µ«´«µÝµÄµ½µ×ÊÇʲô¡¡
ÄØ£¿ÊÇÖ¸Õ룬»¹ÊÇJava¡¡ÒýÓ㿶øÇÒÀ¬»øÊÕ¼¯Æ÷ÔÚ¹ÌÓз½·¨µ÷ÓÃÆÚ¼äÓÖÔÚ×öʲôÄØ£¿¡¡¡¡
À¬»øÊÕ¼¯Æ÷»áÔÚ¹ÌÓз½·¨Ö´ÐÐÆÚ¼ä³ÖÐøÔËÐУ¬µ«ÔÚÒ»´Î¹ÌÓз½·¨µ÷ÓÃÆڼ䣬ÎÒÃǵĶÔÏó¿É±£Ö¤²»»á±»µ±×÷¡¡
¡¡¡°À¬»ø¡±ÊÕ¼¯È¥¡£ÎªÈ·±£ÕâÒ»µã£¬ÊÂÏÈ´´½¨ÁË¡°¾Ö²¿ÒýÓá±£¬²¢ÔÚ¹ÌÓз½·¨µ÷ÓÃÖ®ºóÁ¢¼´Çå³ý¡£ÓÉÓÚËüÃǵġ¡
¡¡¡°ÉúÃüÆÚ¡±Óëµ÷Óùý³ÌϢϢÏà¹Ø£¬ËùÒÔÄܹ»±£Ö¤¶ÔÏóÔÚ¹ÌÓз½·¨µ÷ÓÃÆÚ¼äµÄÓÐЧÐÔ¡£¡¡¡¡
ÓÉÓÚÕâЩÒýÓûáÔÚÿ´Îº¯Êýµ÷ÓõÄʱºò´´½¨ºÍÆÆ»µ£¬ËùÒÔ²»¿ÉÔÚstatic¡¡±äÁ¿ÖÐÖÆ×÷¹ÌÓз½·¨µÄ¾Ö²¿¸±±¾£¨±¾¡¡
µØ¿½±´£©¡£ÈôÏ£ÍûÒ»¸öÒýÓÃÔÚº¯Êý´æÔÚÆÚ¼ä³ÖÐøÓÐЧ£¬¾ÍÐèÒªÒ»¸öÈ«¾ÖÒýÓá£È«¾ÖÒýÓò»ÊÇÓÉJVM¡¡´´½¨µÄ£¬¡¡
µ«Í¨¹ýµ÷ÓÃÌض¨µÄ¡¡JNI¡¡º¯Êý£¬³ÌÐòÔ±¿É½«¾Ö²¿ÒýÓÃÀ©Õ¹ÎªÈ«¾ÖÒýÓᣴ´½¨Ò»¸öÈ«¾ÖÒýÓÃʱ£¬Ðè¶ÔÒýÓöÔÏóµÄ¡¡
¡¡¡°Éú´æʱ¼ä¡±¸ºÔð¡£È«¾ÖÒýÓã¨ÒÔ¼°ËüÒýÓõĶÔÏ󣩻áÒ»Ö±ÁôÔÚÄÚ´æÀֱµ½ÓÃÌض¨µÄJNI¡¡º¯ÊýÃ÷È·ÊÍ·ÅÁË¡¡
Õâ¸öÒýÓá£ËüÀàËÆÓÚC¡¡µÄmalloc£¨£©ºÍ¡¡free£¨£©¡£¡¡¡¡
A¡£1¡£4¡¡JNI¡¡ºÍ¡¡Java¡¡Òì³£¡¡¡¡
ÀûÓá¡JNI£¬¿É¶ªÆú¡¢²¶×½¡¢´òÓ¡ÒÔ¼°ÖØжªÆúJava¡¡Òì³££¬¾ÍÏóÔÚÒ»¸ö¡¡Java¡¡³ÌÐòÀïÄÇÑù¡£µ«¶Ô³ÌÐòÔ±À´Ëµ£¬¡¡
Ðè×ÔÐе÷ÓÃרÓõÄJNI¡¡º¯Êý£¬ÒÔ±ã¶ÔÒì³£½øÐд¦Àí¡£ÏÂÃæÁгöÓÃÓÚÒì³£´¦ÀíµÄһЩJNI¡¡º¯Êý£º¡¡¡¡
¡öThrow£¨£©£º¶ªÆúÒ»¸öÏÖÓеÄÒì³£¶ÔÏó£»ÔÚ¹ÌÓз½·¨ÖÐÓÃÓÚÖØжªÆúÒ»¸öÒì³£¡£¡¡¡¡
¡öThrowNew£¨£©£ºÉú³ÉÒ»¸öеÄÒì³£¶ÔÏ󣬲¢½«Æ䶪Æú¡£¡¡¡¡
¡öExceptionOccurred£¨£©£ºÅжÏÒ»¸öÒì³£ÊÇ·ñÒѱ»¶ªÆú£¬µ«ÉÐδÇå³ý¡£¡¡¡¡
¡öExceptionDescribe£¨£©£º´òÓ¡Ò»¸öÒì³£ºÍ¶ÑÕ»¸ú×ÙÐÅÏ¢¡£¡¡¡¡
¡öExceptionClear£¨£©£ºÇå³ýÒ»¸ö´ý¾öµÄÒì³£¡£¡¡¡¡
¡öFatalError£¨£©£ºÔì³ÉÒ»¸öÑÏÖØ´íÎ󣬲»·µ»Ø¡£¡¡¡¡
ÔÚËùÓÐÕâЩº¯ÊýÖУ¬×î²»ÄܺöÊӵľÍÊÇExceptionOccurred£¨£©ºÍExceptionClear£¨£©¡£´ó¶àÊýJNI¡¡º¯Êý¶¼Äܲú¡¡
ÉúÒì³££¬¶øÇÒûÓÐÏóÔÚ¡¡Java¡¡µÄtry¡¡¿éÄÚµÄÄÇÖÖÓïÑÔÌØÐԿɹ©ÀûÓá£ËùÒÔÔÚÿһ´Î¡¡JNI¡¡º¯Êýµ÷ÓÃÖ®ºó£¬¶¼±ØÐë¡¡
µ÷ÓÃExceptionOccurred£¨£©£¬Á˽âÒì³£ÊÇ·ñÒѱ»¶ªÆú¡£ÈôÕì²âµ½Ò»¸öÒì³££¬¿ÉÑ¡Ôñ¶ÔÆä¼ÓÒÔ¿ØÖÆ£¨¿ÉÄÜʱ»¹¡¡
ÒªÖØжªÆúËü£©¡£È»¶ø£¬±ØÐëÈ·±£Òì³£×îÖÕ±»Çå³ý¡£Õâ¿ÉÒÔÔÚ×Ô¼ºµÄº¯ÊýÖÐÓÃExceptionClear£¨£©À´ÊµÏÖ£»Èô¡¡
Òì³£±»ÖØжªÆú£¬Ò²¿ÉÄÜÔÚÆäËûijЩº¯ÊýÖнøÐС£µ«ÎÞÂÛÈçºÎ£¬ÕâÒ»¹¤×÷ÊDZز»¿ÉÉٵġ£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡654¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡656¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÎÒÃDZØÐë±£Ö¤Òì³£±»³¹µ×Çå³ý¡£·ñÔò£¬¼ÙÈôÔÚÒ»¸öÒì³£´ý¾öµÄÇé¿öϵ÷ÓÃÒ»¸öJNI¡¡º¯Êý£¬»ñµÃµÄ½á¹ûÍùÍùÊÇ¡¡
ÎÞ·¨Ô¤ÖªµÄ¡£Ò²ÓÐÉÙÊý¼¸¸öJNI¡¡º¯Êý¿ÉÔÚÒ쳣ʱ°²È«µ÷Ó㻵±È»£¬ËüÃǶ¼ÊÇרÃŵÄÒì³£¿ØÖƺ¯Êý¡£¡¡¡¡
A¡£1¡£5¡¡JNI¡¡ºÍÏ̴߳¦Àí¡¡¡¡
ÓÉÓÚJava¡¡ÊÇÒ»ÖÖ¶àÏß³ÌÓïÑÔ£¬¼¸¸öÏ߳̿ÉÄÜͬʱ·¢³ö¶ÔÒ»¸ö¹ÌÓз½·¨µÄµ÷Óã¨ÈôÁíÒ»¸öÏ̷߳¢³öµ÷Ó㬹ÌÓС¡
·½·¨¿ÉÄÜÔÚÔËÐÐÆÚ¼äÔÝÍ££©¡£´Ëʱ£¬ÍêÈ«ÒªÓɳÌÐòÔ±À´±£Ö¤¹ÌÓе÷ÓÃÔÚ¶àÏ̵߳Ļ·¾³Öа²È«½øÐС£ÀýÈ磬Ҫ¡¡
·À·¶ÓÃÒ»ÖÖδ½øÐмàÊӵķ½·¨Ð޸Ĺ²ÏíÊý¾Ý¡£´Ëʱ£¬ÎÒÃÇÖ÷ÒªÓÐÁ½¸öÑ¡Ôñ£º½«¹ÌÓз½·¨ÉùÃ÷Ϊ¡°Í¬²½¡±£¬»ò¡¡
ÔÚ¹ÌÓз½·¨ÄÚ²¿²ÉÈ¡ÆäËûijЩ²ßÂÔ£¬È·±£Êý¾Ý´¦ÀíÕýÈ·µØ²¢·¢½øÐС£¡¡¡¡
´ËÍ⣬¾ø¶Ô²»ÒªÍ¨¹ýÏ̴߳«µÝ¡¡JNIEnv£¬ÒòΪËüÖ¸ÏòµÄÄÚ²¿½á¹¹ÊÇÔÚ¡°Ã¿Ï̡߳±µÄ»ù´¡ÉÏ·ÖÅäµÄ£¬¶øÇÒ°üº¬ÁË¡¡
Ö»¶ÔÄÇЩÌض¨µÄÏ̲߳ÅÓÐÒâÒåµÄÐÅÏ¢¡£¡¡¡¡
A¡£1¡£6¡¡¡¡Ê¹ÓÃÏֳɴúÂë¡¡¡¡
ΪʵÏÖJNI¡¡¹ÌÓз½·¨£¬×î¼òµ¥µÄ·½·¨¾ÍÊÇÔÚÒ»¸öJava¡¡ÀàÀï±àд¹ÌÓз½·¨µÄÔÐÍ£¬±àÒëÄǸöÀ࣬ÔÙͨ¹ý¡¡javah¡¡
ÔËÐС£class¡¡Îļþ¡£µ«¼ÙÈôÎÒÃÇÒÑÓÐÒ»¸ö´óÐ͵ġ¢ÔçÒÑ´æÔڵĴúÂë¿â£¬¶øÇÒÏë´ÓJava¡¡Àïµ÷ÓÃËüÃÇ£¬´ËʱÓָá¡
ÈçºÎÊǺÃÄØ£¿²»¿É½«DLL¡¡ÖеÄËùÓк¯Êý¸üÃû£¬Ê¹Æä·ûºÏ¡¡JNI¡¡ÃüÃû¹æÔò£¬ÕâÖÖ·½°¸ÊDz»¿ÉÐеġ£×îºÃµÄ·½·¨ÊÇ¡¡
ÔÚÔÀ´µÄ´úÂë¿â¡°ÍâÃ桱дһ¸ö·â×°DLL¡£Java¡¡´úÂë»áµ÷ÓÃС¡DLL¡¡ÀïµÄº¯Êý£¬ºóÕßÔÙµ÷ÓÃÔʼµÄDLL¡¡º¯Êý¡£¡¡
Õâ¸ö·½·¨²¢·Ç½ö½öÊÇÒ»ÖÖ½â¾ö·½°¸£»´ó¶àÊýÇé¿öÏ£¬ÎÒÃÇÉõÖÁ±ØÐëÕâÑù×ö£¬ÒòΪ±ØÐëÃæÏò¶ÔÏóÒýÓõ÷Óá¡JNI¡¡
º¯Êý£¬·ñÔòÎÞ·¨Ê¹ÓÃËüÃÇ¡£¡¡¡¡
A¡£2¡¡Î¢ÈíµÄ½â¾ö·½°¸¡¡¡¡
µ½±¾ÊéÍê¸åʱΪֹ£¬Î¢ÈíÈÔδÌṩ¶ÔJNI¡¡µÄÖ§³Ö£¬Ö»ÊÇÓÃ×Ô¼ºµÄרÀû·½·¨ÌṩÁ˶ԷÇJava¡¡´úÂëµ÷ÓõÄÖ§³Ö¡£¡¡
ÕâÒ»Ö§³ÖÄÚ½¨µ½±àÒëÆ÷¡¡Microsoft¡¡JVM¡¡ÒÔ¼°Íⲿ¹¤¾ßÖС£Ö»ÓгÌÐòÓá¡Microsoft¡¡Java¡¡±àÒëÆ÷±àÒ룬¶øÇÒÖ»ÓС¡
ÔÚMicrosoft¡¡Java¡¡ÐéÄâ»ú£¨JVM£©ÉÏÔËÐеÄʱºò£¬±¾½Ú½²ÊöµÄÌØÐԲŻáÓÐЧ¡£Èô¼Æ»®ÔÚÒòÌØÍøÉÏ·¢ÐÐ×Ô¼ºµÄ¡¡
Ó¦Ó㬻òÕß±¾µ¥Î»µÄÄÚÁªÍø½¨Á¢ÔÚ²»Í¬Æ½Ì¨µÄ»ù´¡ÉÏ£¬¾Í¿ÉÄܳÉΪһ¸öÑÏÖصÄÎÊÌâ¡£¡¡¡¡
΢ÈíÓëWin32¡¡´úÂëµÄ½Ó¿ÚΪÎÒÃÇÌṩÁËÁ¬½Ó¡¡Win32¡¡µÄÈýÖÖ;¾¶£º¡¡¡¡
£¨1£©¡¡J/Direct£º·½±ãµ÷ÓÃWin32¡¡DLL¡¡º¯ÊýµÄÒ»ÖÖ;¾¶£¬¾ßÓÐijЩÏÞÖÆ¡£¡¡¡¡
£¨2£©¡¡±¾Ô½Ó¿Ú£¨RNI£©£º¿Éµ÷ÓÃWin32¡¡DLL¡¡º¯Êý£¬µ«±ØÐë×ÔÐнâ¾ö¡°À¬»øÊÕ¼¯¡±ÎÊÌâ¡£¡¡¡¡
£¨3£©¡¡Java/¡¡¼¯³É£º¿É´Ó¡¡Java¡¡ÀïÖ±½Ó½Òʾ»òµ÷Óá¡¡¡·þÎñ¡£¡¡¡¡
ºóÐøµÄС½Ú½«·Ö±ð̽ÌÖÕâÈýÖÖ¼¼Êõ¡£¡¡¡¡
д×÷±¾ÊéµÄʱºò£¬ÕâЩÌØÐÔ¾ùͨ¹ýÁËMicrosoft¡¡SDK¡¡for¡¡Java¡¡2¡£0¡¡beta¡¡2¡¡µÄÖ§³Ö¡£¿É´Ó΢Èí¹«Ë¾µÄWeb¡¡Õ¾¡¡
µãÏÂÔØÕâ¸ö¿ª·¢Æ½Ì¨£¨Òª¾ÀúÒ»¸öÍ´¿àµÄÑ¡Ôñ¹ý³Ì£¬ËûÃǽÐ×÷¡°Active¡¡Setup¡±£©¡£Java¡¡SDK¡¡ÊÇÒ»Ì×ÃüÁîÐС¡
¹¤¾ßµÄ¼¯ºÏ£¬µ«±àÒëÒýÇæ¿ÉÇáÒ×ǶÈëDeveloper¡¡Studio¡¡»·¾³£¬ÒÔ±ãÎÒÃÇÓá¡Visual¡¡J£«£«¡¡1¡£1¡¡À´±àÒë¡¡Java¡¡1¡£1¡¡
´úÂë¡£¡¡¡¡
A¡£3¡¡J/Direct¡¡¡¡¡¡
J/Direct¡¡Êǵ÷Ó