ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ152²¿·Ö
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡
·ÃÎÊJNI¡¡º¯Êý£¬ÎÒÃÇÓô«Í³µÄC¡¡Óï·¨À´µ÷ÓÃÒ»¸öº¯Êý¡¡£¨Í¨¹ýÖ¸Õ룩¡£ÀûÓÃÉÏÊöÐÎʽ¿ÉʵÏÖ¶ÔËùÓÐJNI¡¡º¯ÊýµÄ¡¡
·ÃÎÊ¡£¡¡¡¡
A¡£1¡£3¡¡¡¡´«µÝºÍʹÓá¡Java¡¡¶ÔÏó¡¡¡¡
ÔÚÇ°ÀýÖУ¬ÎÒÃǽ«Ò»¸ö×Ö´®´«µÝ¸ø¹ÌÓз½·¨¡£ÊÂʵÉÏ£¬Òà¿É½«×Ô¼º´´½¨µÄ¡¡Java¡¡¶ÔÏ󴫵ݸø¹ÌÓз½·¨¡£¡¡¡¡
ÔÚÎÒÃǵĹÌÓз½·¨ÄÚ²¿£¬¿É·ÃÎÊÒÑÊÕµ½µÄÄÇЩ¶ÔÏóµÄ×ֶμ°·½·¨¡£¡¡¡¡
Ϊ´«µÝ¶ÔÏó£¬ÉùÃ÷¹ÌÓз½·¨Ê±Òª²ÉÓÃÔʼµÄJava¡¡Óï·¨¡£ÈçÏÂÀýËùʾ£¬MyJavaClass¡¡ÓÐÒ»¸ö¡¡public¡¡£¨¹«¹²£©×Ö¡¡
¶Î£¬ÒÔ¼°Ò»¸öpublic¡¡·½·¨¡£UseObjects¡¡ÀàÉùÃ÷ÁËÒ»¸ö¹ÌÓз½·¨£¬ÓÃÓÚ½ÓÊÕ¡¡MyJavaClass¡¡ÀàµÄÒ»¸ö¶ÔÏó¡£Îª¡¡
µ÷²é¹ÌÓз½·¨ÊÇ·ñÄÜ¿ØÖÆ×Ô¼ºµÄ×Ô±äÁ¿£¬ÎÒÃÇÉèÖÃÁË×Ô±äÁ¿µÄ¡¡public¡¡×ֶΣ¬µ÷ÓùÌÓз½·¨£¬È»ºó´òÓ¡³ö¡¡
public¡¡×ֶεÄÖµ¡£¡¡¡¡
¡¡¡¡
class¡¡MyJavaClass¡¡£û¡¡¡¡
¡¡¡¡public¡¡void¡¡divByTwo£¨£©¡¡£û¡¡aValue¡¡/=¡¡2£»¡¡£ý¡¡¡¡
¡¡¡¡public¡¡int¡¡aValue£»¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
public¡¡class¡¡UseObjects¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡UseObjects¡¡app¡¡=¡¡new¡¡UseObjects£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡MyJavaClass¡¡anObj¡¡=¡¡new¡¡MyJavaClass£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡anObj¡£aValue¡¡=¡¡2£»¡¡¡¡
¡¡¡¡¡¡¡¡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¡¡Êǵ÷Óá¡Win32¡¡DLL¡¡º¯Êý×î¼òµ¥µÄ·½Ê½¡£ËüµÄÖ÷ÒªÉè¼ÆÄ¿±êÊÇÓëWin32API¡¡´ò½»µÀ£¬µ«ÍêÈ«¿ÉÓÃËüµ÷¡¡
ÓÃÆäËûÈκΡ¡API¡£µ«ÊÇ£¬¾¡¹ÜÕâÒ»ÌØÐԷdz£·½±ã£¬µ«ËüͬʱҲÔì³ÉÁËijЩÏÞÖÆ£¬ÇÒ½µµÍÁËÐÔÄÜ£¨ÓëRNI¡¡Ïà¡¡
±È£©¡£µ«J/Direct¡¡Ò²ÓÐһЩÃ÷ÏÔµÄÓŵ㡣Ê×ÏÈ£¬³ýÏ£Íûµ÷ÓõÄÄǸöDLL¡¡ÀïµÄ´úÂëÖ®Í⣬ûÓбØÒªÔÙ±àд¶îÍâ¡¡
µÄ·ÇJava¡¡´úÂ룬»»ÑÔÖ®£¬ÎÒÃDz»ÐèÒªÒ»¸ö·â×°Æ÷»òÕß´úÀí£¯´æ¸ùDLL¡£Æä´Î£¬º¯Êý×Ô±äÁ¿Óë±ê×¼Êý¾ÝÀàÐÍÖ®¡¡
¼äʵÏÖÁË×Ô¶¯×ª»»¡£Èô±ØÐë´«µÝÓû§×Ô¶¨ÒåµÄÊý¾ÝÀàÐÍ£¬ÄÇô¡¡J/Direct¡¡¿ÉÄܲ»°´ÎÒÃǵÄÏ£Íû¹¤×÷¡£µÚÈý£¬¾Í¡¡
ÏóÏÂÀýչʾµÄÄÇÑù£¬Ëü·Ç³£¼òµ¥ºÍÖ±½Ó¡£Ö»ÐèÉÙÊý¼¸ÐУ¬Õâ¸öÀý×Ó±ãÄܵ÷ÓÃWin32¡¡API¡¡º¯ÊýMessageBox£¨£©£¬¡¡
ËüÄܵ¯³öÒ»¸öСµÄģ̬´°¿Ú£¬²¢´øÓÐÒ»¸ö±êÌâ¡¢Ò»ÌõÏûÏ¢¡¢Ò»¸ö¿ÉÑ¡µÄͼ±êÒÔ¼°¼¸¸ö°´Å¥¡£¡¡¡¡
¡¡¡¡
public¡¡class¡¡ShowMsgBox¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡¡¡¡¡
¡¡¡¡throws¡¡UnsatisfiedLinkError¡¡¡¡¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡MessageBox£¨0£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Created¡¡by¡¡the¡¡MessageBox£¨£©¡¡Win32¡¡func¡¨£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Thinking¡¡in¡¡Java¡¨£»¡¡0£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡655¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡657¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡/**¡¡@dll¡£import£¨¡¨USER32¡¨£©¡¡*/¡¡¡¡
¡¡¡¡private¡¡static¡¡native¡¡int¡¡¡¡¡¡
¡¡¡¡MessageBox£¨int¡¡hwndOwner£»¡¡String¡¡text£»¡¡¡¡
¡¡¡¡¡¡¡¡String¡¡title£»¡¡int¡¡fuStyle£©£»¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
ÁîÈËÕ𾪵ÄÊÇ£¬ÕâÀï±ãÊÇÎÒÃÇÀûÓá¡J/Direct¡¡µ÷ÓÃWin32¡¡DLL¡¡º¯ÊýËùÐèµÄÈ«²¿´úÂë¡£ÆäÖеĹؼüÊÇλÓÚʾ·¶´ú¡¡
Âëµ×²¿µÄMessageBox£¨£©ÉùÃ÷֮ǰµÄ@dll¡¡¡£import¡¡Òýµ¼ÃüÁî¡£Ëü±íÃæÉÏ¿´ÊÇÒ»Ìõ×¢ÊÍ£¬µ«Êµ¼Ê²¢·ÇÈç´Ë¡£ËüµÄ¡¡
×÷ÓÃÊǸæËß±àÒëÆ÷£ºÒýµ¼ÃüÁîÏÂÃæµÄº¯ÊýÊÇÔÚ¡¡USER32¡¡DLL¡¡ÀïʵÏֵģ¬¶øÇÒÓ¦ÏàÓ¦µØµ÷Óá£ÎÒÃÇÒª×öµÄÈ«²¿Ê¡¡
Çé¾ÍÊÇÌṩÓëDLL¡¡ÄÚʵÏֵĺ¯ÊýÏà·ûµÄÒ»¸öÔÐÍ£¬²¢µ÷Óú¯Êý¡£µ«ÊÇÎãÐèÔÚJava¡¡°æ±¾ÀïÊÖ¹¤¼üÈëÐèÒªµÄÿһ¡¡
¸öWin32¡¡API¡¡º¯Êý£¬Ò»¸öMicrosoft¡¡Java¡¡°ü»á°ïÎÒÃÇ×öÕâ¼þÊÂÇ飨ºÜ¿ì¾Í»áÏêϸ½âÊÍ£©¡£ÎªÁËÈÃÕâ¸öÀý×ÓÕý¡¡
³£¹¤×÷£¬º¯Êý±ØÐë¡°°´Ãû³Æ¡±ÓÉDLL¡¡µ¼³ö¡£µ«ÊÇ£¬Ò²¿ÉÒÔÓÃ@dll¡£import¡¡Òýµ¼ÃüÁî¡°°´Ë³Ðò¡±Á´½Ó¡£¾Ù¸öÀý¡¡
×ÓÀ´Ëµ£¬ÎÒÃÇ¿ÉÖ¸¶¨º¯ÊýÔÚDLL¡¡ÀïµÄÈë¿ÚλÖá£ÉÔºó»¹»á¾ßÌå½²Êö@dll¡£import¡¡Òýµ¼ÃüÁîµÄÌØÐÔ¡£¡¡¡¡
Ó÷ÇJava¡¡´úÂë½øÐÐÁ´½ÓµÄÒ»¸öÖØÒªÎÊÌâ¾ÍÊǺ¯Êý²ÎÊýµÄ×Ô¶¯ÅäÖá£ÕýÈç´ó¼Ò¿´µ½µÄÄÇÑù£¬MessageBox£¨£©µÄ¡¡
Java¡¡ÉùÃ÷²ÉÓÃÁËÁ½¸ö×Ö´®×Ô±äÁ¿£¬µ«ÔÀ´µÄC¡¡·½°¸Ôò²ÉÓÃÁËÁ½¸ö¡¡char¡¡Ö¸Õë¡£±àÒëÆ÷»á°ïÖúÎÒÃÇ×Ô¶¯×ª»»±ê¡¡
×¼Êý¾ÝÀàÐÍ£¬Í¬Ê±×ñÕÕ±¾ÕºóÒ»½ÚÒª½²ÊöµÄ¹æÔò¡£¡¡¡¡
×îºÃ£¬´ó¼Ò»òÐíÒÑ×¢Òâµ½ÁËmain£¨£©ÉùÃ÷Öеġ¡UnsatisfiedLinkError¡¡Òì³£¡£ÔÚÔËÐÐÆÚµÄʱºò£¬Ò»µ©Á´½Ó³ÌÐò¡¡
²»ÄÜ´Ó·ÇJava¡¡º¯ÊýÀï½âÎö³ö·ûºÅ£¬¾Í»á´¥·¢ÕâÒ»Òì³££¨Ê¼þ£©¡£Õâ¿ÉÄÜÊÇÓɶ෽ÃæµÄÔÒòÔì³ÉµÄ£º¡£dll¡¡ÎÄ¡¡
¼þδÕÒµ½£»²»ÊÇÒ»¸öÓÐЧµÄDLL£»»òÕßJ/Direct¡¡Î´»ñÄúËùʹÓõÄÐéÄâ»úµÄÖ§³Ö¡£ÎªÁËʹDLL¡¡Äܱ»ÕÒµ½£¬Ëü±Ø¡¡
ÐëλÓÚWindows¡¡»òWindowsSystem¡¡Ä¿Â¼Ï£¬Î»ÓÚÓÉPATH¡¡»·¾³±äÁ¿ÁгöµÄÒ»¸öĿ¼ÖУ¬»òÕßλÓں͡£class¡¡ÎÄ¡¡
¼þÏàͬµÄĿ¼¡£J/Direct¡¡»ñµÃÁË¡¡Microsoft¡¡Java¡¡±àÒëÆ÷¡¡1¡£02¡£4213¡¡°æ±¾¼°¸ü¸ß°æ±¾µÄÖ§³Ö£¬Ò²»ñµÃÁË¡¡
Microsoft¡¡JVM¡¡4¡£79¡£2164¡¡¼°¸ü¸ß°æ±¾µÄÖ§³Ö¡£ÎªÁ˽â×Ô¼º±àÒëÆ÷µÄ°æ±¾ºÅ£¬ÇëÔÚÃüÁîÐÐÏÂÔËÐС¡JVC£¬²»Òª¼Ó¡¡
ÈκβÎÊý¡£ÎªÁ˽⡡JVM¡¡µÄ°æ±¾ºÅ£¬ÇëÕÒµ½msjava¡£dll¡¡µÄͼ±ê£¬²¢ÀûÓÃÓÒ¼üµ¯³ö²Ëµ¥¹Û²ìËüµÄÊôÐÔ¡£¡¡¡¡
A¡£3¡£1¡¡@dll¡£import¡¡Òýµ¼ÃüÁî¡¡¡¡
×÷ΪʹÓÃJ/Direct¡¡Î¨Ò»µÄ;¾¶£¬@dll¡£import¡¡Òýµ¼ÃüÁîÏ൱Áé»î¡£ËüÌṩÁËΪÊýÖÚ¶àµÄÐ޸ķû£¬¿ÉÓÃËüÃÇ×Ô¡¡
¶¨Òåͬ·ÇJava¡¡´úÂ뽨Á¢Á´½Ó¹ØϵµÄ·½Ê½¡£ËüÒà¿ÉÓ¦ÓÃÓÚÀàÄÚµÄһЩ·½·¨£¬»òÓ¦ÓÃÓÚÕû¸öÀà¡£Ò²¾ÍÊÇ˵£¬ÎÒÃÇ¡¡
ÔÚÄǸöÀàÄÚÉùÃ÷µÄËùÓз½·¨¶¼ÊÇÔÚÏàͬµÄ¡¡DLL¡¡ÀïʵÏֵġ£ÏÂÃæÈÃÎÒÃǾßÌåÑо¿Ò»ÏÂÕâЩÌØÐÔ¡£¡¡¡¡
¡¡¡¡
1¡£¡¡±ðÃû´¦ÀíºÍ°´Ë³ÐòÁ´½Ó¡¡¡¡
ΪÁËʹ@dll¡£import¡¡Òýµ¼ÃüÁîÄÜÏóÉÏÃæÏÔʾµÄÄÇÑù¹¤×÷£¬DLL¡¡Äڵĺ¯Êý±ØÐë°´Ãû×Öµ¼³ö¡£È»¶ø£¬ÎÒÃÇÓÐʱÏëʹ¡¡
ÓÃÓëDLL¡¡ÀïÔʼÃû×Ö²»Í¬µÄÒ»¸öÃû×Ö£¨±ðÃû´¦Àí£©£¬·ñÔòº¯Êý¾Í¿ÉÄÜ°´±àºÅ£¨±ÈÈ簴˳Ðò£©µ¼³ö£¬¶ø²»ÊÇ°´¡¡
Ãû×Öµ¼³ö¡£ÏÂÃæÕâ¸öÀý×ÓÉùÃ÷ÁËFinestraDiMessaggio£¨£©¡¡£¨ÓÃÒâ´óÀûÓï˵µÄ¡°MessageBox¡±£©¡£ÕýÈç´ó¼Ò¿´¡¡
µ½µÄÄÇÑù£¬Ê¹ÓõÄÓï·¨ÊǷdz£¼òµ¥µÄ¡£¡¡¡¡
¡¡¡¡
public¡¡class¡¡Aliasing¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡¡¡¡¡
¡¡¡¡throws¡¡UnsatisfiedLinkError¡¡¡¡¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡FinestraDiMessaggio£¨0£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Created¡¡by¡¡the¡¡MessageBox£¨£©¡¡Win32¡¡func¡¨£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Thinking¡¡in¡¡Java¡¨£»¡¡0£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡/**¡¡@dll¡£import£¨¡¨USER32¡¨£»¡¡¡¡¡¡
¡¡¡¡entrypoint=¡¨MessageBox¡¨£©¡¡*/¡¡¡¡
¡¡¡¡private¡¡static¡¡native¡¡int¡¡¡¡¡¡
¡¡¡¡FinestraDiMessaggio£¨int¡¡hwndOwner£»¡¡String¡¡text£»¡¡¡¡
¡¡¡¡¡¡¡¡String¡¡title£»¡¡int¡¡fuStyle£©£»¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
ÏÂÃæÕâ¸öÀý×ÓչʾÁËÈçºÎͬDLL¡¡Àï²¢·Ç°´Ãû×Öµ¼³öµÄÒ»¸öº¯Êý½¨Á¢Á´½Ó£¬ÄǸöº¯ÊýÊÂʵÊÇ°´ËüÃÇÔÚDLL¡¡ÀïµÄ¡¡
λÖõ¼³öµÄ¡£Õâ¸öÀý×Ó¼ÙÉèÓÐÒ»¸öÃûΪMYMATH¡¡µÄDLL£¬Õâ¸ö¡¡DLL¡¡ÔÚÎ
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾Ñé½±Àø£¬ÈÏÕæдԴ´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾Ñé½±ÀøŶ£¡