Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ168²¿·Ö
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
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¡¡ÔÚλÖñàºÅ¡¡3¡¡´¦°üº¬ÁËÒ»¸öº¯Êý¡£ÄǸöº¯Êý¡¡
»ñÈ¡Á½¸öÕûÊý×÷Ϊ×Ô±äÁ¿£¬²¢·µ»ØÁ½¸öÕûÊýµÄºÍ¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡656¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡658¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
public¡¡class¡¡ByOrdinal¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡¡¡¡¡
¡¡¡¡throws¡¡UnsatisfiedLinkError¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡int¡¡j=3£»¡¡k=9£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Result¡¡of¡¡DLL¡¡function£º¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡Add£¨j£»k£©£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡/**¡¡@dll¡£import£¨¡¨MYMATH¡¨£»¡¡entrypoint¡¡=¡¡¡¨#3¡¨£©¡¡*/¡¡¡¡
¡¡¡¡private¡¡static¡¡native¡¡int¡¡Add£¨int¡¡op1£»int¡¡op2£©£»¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
¿ÉÒÔ¿´³ö£¬Î¨Ò»µÄ²îÒì¾ÍÊÇentrypoint¡¡×Ô±äÁ¿µÄÐÎʽ¡£¡¡¡¡
¡¡¡¡
2¡£¡¡½«@dll¡£import¡¡Ó¦ÓÃÓÚÕû¸öÀà¡¡¡¡
@dll¡£import¡¡Òýµ¼ÃüÁî¿ÉÓ¦ÓÃÓÚÕû¸öÀà¡£Ò²¾ÍÊÇ˵£¬ÄǸöÀàµÄËùÓз½·¨¶¼ÊÇÔÚÏàͬµÄDLL¡¡ÀïʵÏֵģ¬²¢¾ßÓС¡
ÏàͬµÄÁ´½ÓÊôÐÔ¡£Òýµ¼ÃüÁî²»»áÓÉ×ÓÀà¼Ì³Ð£»¿¼Âǵ½Õâ¸öÔÒò£¬¶øÇÒÓÉÓÚ¡¡DLL¡¡ÀïµÄº¯ÊýÊÇ×ÔÈ»µÄ¡¡static¡¡º¯¡¡
Êý£¬ËùÒÔ¸ü¼ÑµÄÉè¼Æ·½°¸Êǽ«API¡¡º¯Êý·â×°µ½Ò»¸ö¶ÀÁ¢µÄÀàÀÈçÏÂËùʾ£º¡¡¡¡
¡¡¡¡
/**¡¡@dll¡£import£¨¡¨USER32¡¨£©¡¡*/¡¡¡¡
class¡¡MyUser32Access¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡native¡¡int¡¡¡¡¡¡
¡¡¡¡MessageBox£¨int¡¡hwndOwner£»¡¡String¡¡text£»¡¡¡¡
¡¡¡¡¡¡¡¡String¡¡title£»¡¡int¡¡fuStyle£©£»¡¡¡¡
¡¡¡¡public¡¡native¡¡static¡¡boolean¡¡¡¡¡¡
¡¡¡¡MessageBeep£¨int¡¡uType£©£»¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
public¡¡class¡¡WholeClass¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡¡¡¡¡
¡¡¡¡throws¡¡UnsatisfiedLinkError¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡MyUser32Access¡£MessageBeep£¨4£©£»¡¡¡¡
¡¡¡¡¡¡¡¡MyUser32Access¡£MessageBox£¨0£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Created¡¡by¡¡the¡¡MessageBox£¨£©¡¡Win32¡¡func¡¨£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Thinking¡¡in¡¡Java¡¨£»¡¡0£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
ÓÉÓÚMessageBeep£¨£©ºÍ¡¡MessageBox£¨£©º¯ÊýÒÑÔÚ²»Í¬µÄÀàÀï±»ÉùÃ÷³É¡¡static¡¡º¯Êý£¬ËùÒÔ±ØÐëÔÚµ÷ÓÃËüÃÇʱ¹æ¶¨¡¡
×÷ÓÃÓò¡£´ó¼ÒÒ²ÐíÈÏΪ±ØÐëÓÃÉÏÊöµÄ·½·¨½«ËùÓÐWin32¡¡API¡¡£¨º¯Êý¡¢³£ÊýºÍÊý¾ÝÀàÐÍ£©¶¼Ó³Éä³ÉJava¡¡Àà¡£µ«¡¡
ÐÒÔ˵ÄÊÇ£¬¸ù±¾²»±ØÕâÑù×ö¡£¡¡¡¡
A¡£3¡£2¡¡¡£ms¡£win32¡¡°ü¡¡¡¡
Win32¡¡API¡¡µÄÌå»ýÏ൱ÅӴ󡪡ª°üº¬ÁËÊýÒÔǧ¼ÆµÄº¯Êý¡¢³£ÊýÒÔ¼°Êý¾ÝÀàÐÍ¡£µ±È»£¬ÎÒÃDz¢²»Ï뽫ÿ¸öWin32¡¡¡¡
API¡¡º¯Êý¶¼Ð´³É¶ÔÓ¦Java¡¡ÐÎʽ¡£Î¢Èí¿¼Âǵ½ÁËÕâ¸öÎÊÌ⣬·¢ÐÐÁËÒ»¸öJava¡¡°ü£¬¿Éͨ¹ý¡¡J/Direct¡¡½«¡¡Win32¡¡¡¡
API¡¡Ó³Éä³É¡¡Java¡¡Àà¡£Õâ¸ö°üµÄÃû×Ö½Ð×÷¡¡¡£ms¡£win32¡£°²×°Java¡¡SDK¡¡2¡£0¡¡Ê±£¬ÈôÔÚ°²×°Ñ¡ÏîÖнøÐÐÁËÏàÓ¦¡¡
µÄÉèÖã¬Õâ¸ö°ü¾Í»á°²×°µ½ÎÒÃǵÄÀà·¾¶ÖС£Õâ¸ö°üÓÉ´óÁ¿Java¡¡À๹³É£¬ËüÃÇÍêÕûÔÙÏÖÁË¡¡Win32¡¡API¡¡µÄ³£¡¡
Êý¡¢Êý¾ÝÀàÐÍÒÔ¼°º¯Êý¡£°üÈÝÄÜÁ¦×î´óµÄÈý¸öÀàÊÇ¡¡User32¡£class£¬Kernel¡£class¡¡ÒÔ¼°Gdi32¡£class¡£ËüÃÇ°ü¡¡
º¬µÄÊÇWin32¡¡API¡¡µÄºËÐÄÄÚÈÝ¡£ÎªÊ¹ÓÃËüÃÇ£¬Ö»ÐèÔÚ×Ô¼ºµÄ¡¡Java¡¡´úÂëÀïµ¼Èë¼´¿É¡£Ç°ÃæµÄShowMsgBox¡¡Ê¾Àý¡¡
¿ÉÓá£ms¡£win32¡¡¸Äд³ÉÏÂÃæÕâ¸öÑù×Ó£¨ÕâÀïÒ²¿¼Âǵ½ÁËÓøüÇ¡µ±µÄ·½Ê½Ê¹ÓÃUnsatisfiedLinkError£©£º¡¡¡¡
¡¡¡¡
import¡¡¡£ms¡£win32¡£*£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡657¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡659¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡
public¡¡class¡¡UseWin32Package¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡User32¡£MessageBeep£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡winm¡£MB_ICONEXCLAMATION£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡User32¡£MessageBox£¨0£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨Created¡¡by¡¡the¡¡MessageBox£¨£©¡¡Win32¡¡func¡¨£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨Thinking¡¡in¡¡Java¡¨£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡winm¡£MB_OKCANCEL¡¡£ü¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡winm¡£MB_ICONEXCLAMATION£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡catch£¨UnsatisfiedLinkError¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Can¡¯t¡¡link¡¡Win32¡¡API¡¨£©£»¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨e£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
Java¡¡°üÊÇÔÚµÚÒ»Ðе¼ÈëµÄ¡£ÏÖÔÚ£¬¿ÉÔÚ²»½øÐÐÆäËûÉùÃ÷µÄÇ°Ìáϵ÷ÓÃMessageBeep£¨£©ºÍ¡¡MessageBox£¨£©º¯Êý¡£¡¡
ÔÚMessageBeep£¨£©ÀÎÒÃÇ¿É¿´µ½°üµ¼ÈëʱҲÉùÃ÷ÁË¡¡Win32¡¡³£Êý¡£ÕâЩ³£ÊýÊÇÔÚ´óÁ¿Java¡¡½Ó¿ÚÀﶨÒåµÄ£¬È«¡¡
²¿ÃüÃûΪwinx¡¡£¨x¡¡´ú±íÓûʹÓÃÖ®³£ÊýµÄÊ××Öĸ£©¡£¡¡¡¡
д×÷±¾Êéʱ£¬¡£ms¡£win32¡¡°üµÄ¿ª·¢ÈÔδÕýʽÍê³É£¬µ«ÒÑ¿É¿°Ê¹Óᣡ¡¡¡
A¡£3¡£3¡¡¡¡»ã¼¯¡¡¡¡
¡¡¡°»ã¼¯¡±£¨Marshaling£©ÊÇÖ¸½«Ò»¸öº¯Êý×Ô±äÁ¿´ÓËüÔʼµÄ¶þ½øÖÆÐÎʽת»»³ÉÓëÓïÑÔÎ޹صÄijÖÖÐÎʽ£¬ÔÙ½«¡¡
ÕâÖÖͨÓÃÐÎʽת»»³ÉÊʺϵ÷Óú¯Êý²ÉÓõĶþ½øÖƸñʽ¡£ÔÚÇ°ÃæµÄÀý×ÓÖУ¬ÎÒÃǵ÷ÓÃÁËMessageBox£¨£©º¯Êý£¬²¢¡¡
ÏòËü´«µÝÁËÁ½¸ö×Ö´®¡£MessageBox£¨£©ÊǸöC¡¡º¯Êý£¬¶øÇÒ¡¡Java¡¡×Ö´®µÄ¶þ½øÖƲ¼¾ÖÓëC¡¡×Ö´®²¢²»Ïàͬ¡£µ«¾¡¹ÜÈç¡¡
´Ë£¬×Ô±äÁ¿ÈÔ»ñµÃÁËÕýÈ·µÄ´«µÝ¡£ÕâÊÇÓÉÓÚÔÚµ÷Óá¡C¡¡´úÂëÇ°£¬J/Direct¡¡ÒÑ°ïÎÒÃÇ¿¼Âǵ½Á˽«Java¡¡×Ö´®×ª»»¡¡
³ÉC¡¡×Ö´®µÄÎÊÌâ¡£ÕâÖÖÇé¿öÊʺÏËùÓбê×¼µÄJava¡¡ÀàÐÍ¡£ÏÂÃæÕâÕűí¸ñ×ܽáÁ˼òµ¥Êý¾ÝÀàÐ͵ÄĬÈ϶ÔÓ¦¹Øϵ£º¡¡¡¡
¡¡¡¡
Java¡¡C¡¡¡¡
¡¡¡¡
byte¡¡BYTE¡¡»òCHAR¡¡¡¡
short¡¡SHORT»ò¡¡WORD¡¡¡¡
int¡¡INT£¬UINT¡¡£¬LONG£¬ULONG¡¡»ò¡¡DWORD¡¡¡¡
char¡¡TCHAR¡¡¡¡
long¡¡__int64¡¡¡¡
float¡¡Float¡¡¡¡
double¡¡Double¡¡¡¡
boolean¡¡BOOL¡¡¡¡
String¡¡LPCTSTR¡¡£¨Ö»ÔÊÐíÔÚOLE¡¡Ä£Ê½ÖÐ×÷Ϊ·µ»ØÖµ£©¡¡¡¡
byte£§£§¡¡BYTE¡¡*¡¡¡¡
short£§£§¡¡WORD¡¡*¡¡¡¡
char£§£§¡¡TCHAR¡¡*¡¡¡¡
int£§£§¡¡DWORD¡¡*¡¡¡¡
¡¡¡¡
Õâ¸öÁÐ±í»¹¿É¼ÌÐøÏÂÈ¥£¬µ«ÒѺÜÄÜ˵Ã÷ÎÊÌâÁË¡£´ó¶àÊýÇé¿öÏ£¬ÎÒÃDz»±Ø¹ØÐÄÓë¼òµ¥Êý¾ÝÀàÐÍÖ®¼äµÄת»»ÎÊ¡¡
Ìâ¡£µ«Ò»µ©±ØÐë´«µÝÓû§×Ô¶¨ÒåÀàÐ͵Ä×Ô±äÁ¿£¬Çé¿ö¾ÍÁ¢¼´±äµÃ²»Í¬ÁË¡£ÀýÈ磬¿ÉÄÜÐèÒª´«µÝÒ»¸ö½á¹¹»¯¡¡
µÄ¡¢Óû§×Ô¶¨ÒåµÄÊý¾ÝÀàÐÍ£¬»òÕßÐèÒª°ÑÒ»¸öÖ¸Õë´«¸øÔʼÄÚ´æÇøÓò¡£ÔÚÕâЩÇé¿öÏ£¬ÓÐһЩÌØÊâµÄ±àÒëÒý¡¡
µ¼ÃüÁî±ê¼ÇÒ»¸öJava¡¡À࣬ʹÆäÄÜ×÷Ϊһ¸öÖ¸Õë´«¸ø½á¹¹£¨@dll¡£struct¡¡Òýµ¼ÃüÁ¡£Óû֪ʹÓÃÕâЩ¹Ø¼ü×ֵġ¡
ϸ½Ú£¬Çë²Î¿¼²úÆ·Îĵµ¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡658¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡660¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
A¡£3¡£4¡¡¡¡±àд»Øµ÷º¯Êý¡¡¡¡
ÓÐЩWin32¡¡API¡¡º¯ÊýÒªÇó½«Ò»¸öº¯ÊýÖ¸Õë×÷Ϊ×Ô¼ºµÄ²ÎÊýʹÓá£Windows¡¡API¡¡º¯ÊýËæºó¾Í¿ÉÒÔµ÷ÓÃ×Ô±äÁ¿º¯¡¡
Êý£¨Í¨³£ÊÇÔÚÒÔºó·¢ÉúÌض¨µÄʼþʱ£©¡£ÕâÒ»¼¼Êõ¾Í½Ð×÷¡°»Øµ÷º¯Êý¡±¡£»Øµ÷º¯ÊýµÄÀý×Ó°üÀ¨´°¿Ú½ø³ÌÒÔ¼°¡¡
ÎÒÃÇÔÚ´òÓ¡¹ý³ÌÖÐÉèÖõĻص÷£¨Îªºǫ́´òÓ¡³ÌÐòÌṩ»Øµ÷º¯ÊýµÄµØÖ·£¬Ê¹ÆäÄܸüÐÂ״̬£¬²¢ÔÚ±ØÒªµÄʱºòÖС¡
Ö¹´òÓ¡£©¡£¡¡¡¡
ÁíÒ»¸öÀý×ÓÊÇAPI¡¡º¯ÊýEnumWindows£¨£©¡¡£¬ËüÄÜö¾ÙĿǰϵͳÄÚËùÓж¥¼¶´°¿Ú¡£EnumWindows£¨£©ÒªÇó»ñÈ¡Ò»¸öº¯¡¡
ÊýÖ¸Õë×÷Ϊ×Ô¼ºµÄ²ÎÊý£¬È»ºóËÑË÷ÓÉWindows¡¡ÄÚ²¿Î¬»¤µÄÒ»¸öÁÐ±í¡£¶ÔÓÚÁбíÄÚµÄÿ¸ö´°¿Ú£¬Ëü¶¼»áµ÷Óûء¡
µ÷º¯Êý£¬½«´°¿Ú¾ä±ú×÷Ϊһ¸ö×Ô±äÁ¿´«¸ø»Øµ÷¡£¡¡¡¡
ΪÁËÔÚJava¡¡Àï´ïµ½Í¬ÑùµÄÄ¿µÄ£¬±ØÐëʹÓá¡¡£ms¡£dll¡¡°üÀïµÄ¡¡Callback¡¡Àà¡£ÎÒÃÇ´Ó¡¡Callback¡¡Àï¼Ì³Ð£¬²¢È¡¡¡
Ïûcallback£¨£©¡£Õâ¸ö·½·¨Ö»Äܽӽüint¡¡²ÎÊý£¬²¢»á·µ»Ø¡¡int»òvoid¡£·½·¨Ç©ÃûºÍ¾ßÌåµÄʵʩȡ¾öÓÚʹÓÃÕâ¸ö¡¡
»Øµ÷µÄWindows¡¡API¡¡º¯Êý¡£¡¡¡¡
ÏÖÔÚ£¬ÎÒÃÇÒª½øÐеÄÈ«²¿¹¤×÷¾ÍÊÇ´´½¨Õâ¸öCallback¡¡ÑÜÉúÀàµÄÒ»¸öʵÀý£¬²¢½«Æä×÷Ϊº¯ÊýÖ¸Õë´«µÝ¸øAPI¡¡º¯¡¡
Êý¡£Ëæºó£¬J/Direct¡¡»á°ïÖúÎÒÃÇ×Ô¶¯Íê³ÉÊ£ÓàµÄ¹¤×÷¡£¡¡¡¡
ÏÂÃæÕâ¸öÀý×Óµ÷ÓÃÁËWin32¡¡API¡¡º¯ÊýEnumWindows£¨£©¡¡£»EnumWindowsProc¡¡ÀàÀïµÄ¡¡callback£¨£©·½·¨»á»ñȡÿ¸ö¡¡
¶¥¼¶´°¿ÚµÄ¾ä±ú£¬»ñÈ¡±êÌâÎÄ×Ö£¬²¢½«Æä´òÓ¡µ½¿ØÖÆ̨´°¿Ú¡£¡¡¡¡
¡¡¡¡
import¡¡¡£ms¡£dll¡£*£»¡¡¡¡
import¡¡¡£ms¡£win32¡£*£»¡¡¡¡
¡¡¡¡
class¡¡EnumWindowsProc¡¡extends¡¡Callback¡¡£û¡¡¡¡
¡¡¡¡public¡¡boolean¡¡callback£¨int¡¡hwnd£»¡¡int¡¡lparam£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡StringBuffer¡¡text¡¡=¡¡new¡¡StringBuffer£¨50£©£»¡¡¡¡
¡¡¡¡¡¡¡¡User32¡£GetWindowText£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡hwnd£»¡¡text£»¡¡text¡£capacity£¨£©£«1£©£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨text¡£length£¨£©¡¡£¡=¡¡0£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨text£©£»¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡true£»¡¡¡¡//¡¡to¡¡continue¡¡enumeration¡£¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
public¡¡class¡¡ShowCallback¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String¡¡args£§£§£©¡¡¡¡
¡¡¡¡throws¡¡InterruptedException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡boolean¡¡ok¡¡=¡¡User32¡£EnumWindows£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡new¡¡EnumWindowsProc£¨£©£»¡¡0£©£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨£¡ok£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£err¡£println£¨¡¨EnumWindows¡¡failed¡£¡¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Thread¡£currentThread£¨£©¡£sleep£¨3000£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
¶Ô¡¡sleep£¨£©µÄµ÷ÓÃÔÊÐí´°¿Ú½ø³ÌÔÚmain£¨£©Í˳öÇ°Íê³É¡£¡¡¡¡
A¡£3¡£5¡¡¡¡ÆäËû¡¡J/Direct¡¡ÌØÐÔ¡¡¡¡
ͨ¹ý@dll¡£import¡¡Òýµ¼ÃüÁîÄÚµÄÐ޸ķû£¨±ê¼Ç£©£¬»¹¿ÉÓõ½¡¡J/Direct¡¡µÄÁíÁ½ÏîÌØÐÔ¡£µÚÒ»ÏîÊǶÔOLE¡¡º¯ÊýµÄ¡¡
¼ò»¯·ÃÎÊ£¬µÚ¶þÏîÊÇÑ¡ÔñAPI¡¡º¯ÊýµÄANSI¡¡¼°¡¡Unicode¡¡°æ±¾¡£¡¡¡¡
¸ù¾ÝÔ¼¶¨£¬ËùÓÐOLE¡¡º¯Êý¶¼»á·µ»ØÀàÐÍΪHRESULT¡¡µÄÒ»¸öÖµ£¬ËüÊÇÓÉ¡¡¡¡¶¨ÒåµÄÒ»¸ö½á¹¹»¯ÕûÊýÖµ¡£ÈôÔÚ¡¡
¡¡ÄÇÒ»¼¶±àд³ÌÐò£¬²¢Ï£Íû´ÓÒ»¸öOLE¡¡º¯ÊýÀï·µ»ØijЩ²»Í¬µÄ¶«Î÷£¬¾Í±ØÐ뽫һ¸öÌØÊâµÄÖ¸Õë´«µÝ¸øËü¡ª¡¡
¡ª¸ÃÖ¸ÕëÖ¸Ïòº¯Êý¼´½«ÔÚÆäÖÐÌî³äÊý¾ÝµÄÄǸöÄÚ´æÇøÓò¡£µ«ÔÚ¡¡Java¡¡ÖУ¬ÎÒÃÇûÓÐÖ¸Õë¿ÉÓã»´ËÍ⣬ÕâÖÖ·½·¨¡¡
²¢²»¼òÁ·¡£ÀûÓÃJ/Direct£¬ÎÒÃÇ¿ÉÔÚ@dll¡£import¡¡Òýµ¼ÃüÁîÀïʹÓÃole¡¡Ð޸ķû£¬´Ó¶ø·½±ãµØµ÷ÓÃOLE¡¡º¯Êý¡£¡¡
±ê¼ÇΪ¡¡ole¡¡º¯ÊýµÄÒ»¸ö¹ÌÓз½·¨»á´ÓJava¡¡ÐÎʽµÄ·½·¨Ç©Ãû£¨Í¨¹ýËü¾ö¶¨·µ»ØÀàÐÍ£©×Ô¶¯×ª»»³É¡¡¡¡ÐÎʽµÄº¯¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡659¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡661¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Êý¡£¡¡¡¡
µÚ¶þÏîÌØÐÔÊÇÑ¡ÔñANSI¡¡»òÕß¡¡Unicode¡¡×Ö´®¿ØÖÆ·½·¨¡£¶Ô×Ö´®½øÐпØÖƵĴó¶àÊý¡¡Win32¡¡API¡¡º¯Êý¶¼ÌṩÁËÁ½¸ö¡¡
°æ±¾¡£ÀýÈ磬¼ÙÉèÎÒÃǹ۲ìÓÉ¡¡USER32¡£DLL¡¡µ¼³öµÄ·ûºÅ£¬ÄÇô²»»áÕÒµ½Ò»¸öMessageBox£¨£©º¯Êý£¬Ïà·´»á¿´µ½¡¡
MessageBoxA£¨£©ºÍMessageBoxW£¨£©¡¡º¯Êý¡ª¡ª·Ö±ðÊǸú¯ÊýµÄANSI¡¡ºÍ¡¡Unicode¡¡°æ±¾¡£Èç¹ûÔÚ@dll¡£import¡¡Òýµ¼Ãü¡¡
ÁîÀï²»¹æ¶¨Ïëµ÷ÓÃÄĸö°æ±¾£¬JVM¡¡¾Í»áÊÔ×Å×ÔÐÐÅжϡ£µ«ÕâÒ»²Ù×÷»áÔÚ³ÌÐòÖ´ÐÐʱ»¨·Ñ½Ï³¤µÄʱ¼ä¡