«á¤@¶ «e¤@¶ ¦^¥Ø¿ý ¦^º¶ |
10.1 Windowsªº°ÊºAÁåµ²®wì²z¡@ ¡@¡@°ÊºAÁåµ²®w(DLLs)¬O±qC»y¨¥¨ç¼Æ®w©MPascal®w³æ¤¸ªº·§©Àµo®i¦Ó¨Óªº¡C©Ò¦³ªºC»y¨¥¼Ð·Ç®w¨ç¼Æ³£¦s©ñ¦b¬Y¤@¨ç¼Æ®w¤¤¡A¦P®É¥Î¤á¤]¥i¥H¥ÎLIBµ{¦¡«Ø¥ß¦Û¤vªº¨ç¼Æ®w¡C¦bÁåµ²À³¥Îµ{¦¡ªº¹Lµ{¤¤¡AÁåµ²¾¹±q®w¤å¥ó¤¤«þ¨©µ{¦¡©I¥sªº¨ç¼Æ¥N½X¡A¨Ã§â³o¨Ç¨ç¼Æ¥N½X¥[¤J¨ì¥i°õ¦æ¤å¥ó¤¤¡C³oºØ¤èªk¦P¥u§â¨ç¼ÆÀx¦s¦b¤w½sĶªº.OBJ¤å¥ó¤¤¬Û¤ñ§ó¦³§Q©ó¥N½Xªº«¥Î¡C ¡@¡@¦ýÀHµÛWindows³o¼Ëªº¦h¤uÀô¹Òªº¥X²{¡A¨ç¼Æ®wªº¤èªkÅã±o¹L©ó²ÖÂØ¡C¦pªG¬°¤F§¹¦¨¿Ã¹õ¿é¥X¡B°T®§³B²z¡B°O¾ÐÅéºÞ²z¡B¹ï¸Ü¤è¶ôµ¥¾Þ§@¡A¨CÓµ{¦¡³£¤£±o¤£¾Ö¦³¦Û¤vªº¨ç¼Æ¡A¨º»òWindowsµ{¦¡±NÅܱo«D±`Ãe¤j¡CWindowsªºµo®in¨D¤¹³\¦P®É°õ¦æªº´XÓµ{¦¡¦@¨É¤@¸s¸s²Õ¨ç¼Æªº³æ¤@«þ¨©¡C°ÊºAÁåµ²®w´N¬O¦b³oºØ±¡ªp¤U¥X²{ªº¡C°ÊºAÁåµ²®w¤£¥Î«½Æ½sĶ©ÎÁåµ²¡A¤@¥¹¸ü¤J°O¾ÐÅé¡ADlls¨ç¼Æ¥i¥H³Q¨t²Î¤¤ªº¥ô¦ó¥¿¦b°õ¦æªºÀ³¥Îµ{¦¡³nÅé©Ò¨Ï¥Î¡A¦Ó¤£¥²¦A±NDLLs¨ç¼Æªº¥t¤@«þ¨©¸ü¤J°O¾ÐÅé¡C¡@ 10.1.1 °ÊºAÁåµ²®wªº¤u§@ì²z¡@ ¡@¡@¡§°ÊºAÁåµ²¡¨³o´X¦r«ü©ú¤FDLLs¬O¦p¦ó¤u§@ªº¡C¹ï©ó¶Ç²Îªº¨ç¼Æ®w¡AÁåµ²¾¹±q¤¤«þ¨©¥¦»Ýnªº©Ò¦³®w¨ç¼Æ¡A¨Ã§â½T¤Áªº¨ç¼Æ¦ì§}Âà°eµ¹©I¥s³o¨Ç¨ç¼Æªºµ{¦¡¡C¦Ó¹ï©óDLLs¡A¨ç¼ÆÀx¦s¦b¤@Ó¿W¥ßªº°ÊºAÁåµ²®w¤å¥ó¤¤¡C¦b«Ø¥ßWindowsµ{¦¡®É¡AÁåµ²¹Lµ{¨Ã¤£§âDLLs¤å¥óÁåµ²¨ìµ{¦¡¤W¡Cª½¨ìµ{¦¡°õ¦æ¨Ã©I¥s¤@ÓDLLs¤¤ªº¨ç¼Æ®É¡A¸Óµ{¦¡¤~n¨D³oÓ¨ç¼Æªº¦ì§}¡C¦¹®ÉWindows¤~¦bDLLs¤¤´M§ä³Q©I¥s¨ç¼Æ¡A¨Ã§â¥¦ªº¦ì§}Âà°eµ¹©I¥sµ{¦¡¡C±Ä¥Î³oºØ¤èªk¡ADLLs¹F¨ì¤F´_¥Î¥N½Xªº·¥¡C ¡@¡@°ÊºAÁåµ²®wªº¥t¤@Ó¤è«K¤§³B¬O¹ï°ÊºAÁåµ²®w¤¤¨ç¼Æªº×§ï¥i¥H¦Û°Ê¶Ç¼½¨ì©Ò¦³©I¥s¥¦ªºµ{¦¡¤¤¡A¦Ó¤£¥²¹ïµ{¦¡§@¥ô¦ó§ï°Ê©Î³B²z¡C ¡@¡@DLLs¤£¶È´£¨Ñ¤F¨ç¼Æ«¥Îªº¾÷¨î¡A¦Ó¥B´£¨Ñ¤F¼Æ¾Ú¦@¨Éªº¾÷¨î¡C¥ô¦óÀ³¥Îµ{¦¡³£¥i¥H¦@¨É¥Ñ¸ü¤J°O¾ÐÅ骺DLLsºÞ²zªº°O¾ÐÅé¸ê·½¶ô¡C¥u¥]§t¦@¨É¼Æ¾ÚªºDLLsºÙ¬°¸ê·½¤å¥ó¡C¦pWindowsªº¦r§Î¤å¥óµ¥¡C¡@ 10.1.2 Windows¨t²Îªº°ÊºAÁåµ²®w¡@ ¡@¡@Windows¥»¨´N¬O¥Ñ¤j¶qªº°ÊºAÁåµ²®w¤ä´©ªº¡C³o¥]¬AWindows API¨ç¼Æ ( KRNLx86.EXE¡AUSER.EXE¡AGDI.EXE¡A¡K)¡A¦UºØÅX°Êµ{¦¡¤å¥ó¡A¦UºØ±a¦³.Fon©M.Fot Àɮתþ¥[¦Wªº¦r§Î¸ê·½¤å¥óµ¥¡CWindowsÁÙ´£¨Ñ¤F°w¹ï¬Y¤@¥\¯àªº±M¥ÎDLLs¡A¦p¶i¦æDDEµ{¦¡³]pªºddeml.dll¡A¶i¦æµ{¦¡¸Ë³]ªºver.dllµ¥¡C ¡@¡@ÁöµM¦b½s¼gWindowsµ{¦¡®É¥²µMn¯A¤Î¨ìDLLs¡A¦ý§Q¥ÎDelphi ¡A¥Î¤á¦b¤j³¡¤À®ÉԨ䣷|ª`·N¨ì³o¤@ÂI¡C³o¤@¤è±¬O¦]¬°Delphi´£¨Ñ¤FÂ×´Iªº¨ç¼Æ¨Ï¥Î¤á¤£¥²ª½±µ¥h¨Ï¥ÎWindows API;¥t¤@¤è±§Y¨Ï¨Ï¥ÎWindows API¡A¥Ñ©óDelphi§âAPI¨ç¼Æ©M¨ä¥¦Windows DLLs¨ç¼Æ«·s¸s¸s²Õ´¨ì¤F´XÓ®w³æ¤¸¤¤¡A¦]¦Ó¤]¤£¥²¨Ï¥Î¯S®íªº©I¥s®æ¦¡¡C©Ò¥H¥»³¹ªº«ÂI©ñ¦b½s¼g©M©I¥s¥Î¤á¦Û©w¸qªºDLLs¤W¡C ¡@¡@¨Ï¥Î¶Ç²ÎªºWindowsµ{¦¡³]p¤èªk¨Ó«Ø¥ß©M¨Ï¥Î¤@ÓDLLs¬O¤@¥ó«Ü¥O¤HÀYµhªº¨Æ¡A¥¿¦p¶Ç²ÎªºWindowsµ{¦¡³]p¤èªk¥»¨´N¥O¤H¥Í¬È¤@¼Ë¡C¥Î¤á»Ýn¹ï©w¸q¤å¥ó¡B¤uµ{¤å¥ó¶i¦æ¤@¨t¦Cªº×§ï¥H¾AÀ³«Ø¥ß©M¨Ï¥ÎDLLsªº»Ýn¡CDelphiªº¥X²{¡A¦b³o¤@¤è±¡A¥¿¦p¦b¨ä¥¦³\¦h¤è±©Ò°µªº¨º¼Ë¡A´î»´¤F¶}µoªÌªºt¾á¡C§ó¥O¤H¿³¾Äªº¬ODelphi§Q¥ÎDLLs ¹ê²{¤Fµ¡Å骺«¥Î¾÷¨î¡C¥Î¤á¥i¥H±N¦Û¤v³]p¦nªºµ¡ÅéÀx¦s¦b¤@ÓDLLs¤¤¡A¦b»Ýnªº®ÉÔ¥iÀH®É©I¥s¥¦¡C¡@ 10.2 DLLsªº½s¼g©M©I¥s¡@ 10.2.1 DLLsªº½s¼g¡@ ¡@¡@¦bDelphiÀô¹Ò¤¤¡A½s¼g¤@ÓDLLs¦P½s¼g¤@Ó¤@¯ëªºÀ³¥Îµ{¦¡¨Ã¨S¦³¤Ó¤jªº°Ï§O¡C¨Æ¹ê¤W§@¬°DLLs ¥DÅ骺DLL¨ç¼Æªº½s¼g¡A°£¤F¦b°O¾ÐÅé¡B¸ê·½ªººÞ²z¤W¦³©Ò¤£¦P¥~¡A¨Ã¤£»Ýn¨ä¥¦¯S§Oªº¤â¬q¡C¯u¥¿ªº°Ï§O¦b¤uµ{¤å¥ó¤W¡C ¡@¡@¦bµ´¤j¦h¼Æ±¡ªp¤U¡A¥Î¤á´X¥G·NÃѤ£¨ì¤uµ{¤å¥óªº¦s¦b¡A¦]¬°¥¦¤@¯ë¤£Åã¥Ü¦b¿Ã¹õ¤W¡C¦pªG·Q¬d¬Ý¤uµ{¤å¥ó¡A«h¥i¥H¥´¶}View¿ï¾Üªí¿ï¾ÜProject Source¶µ¡A¦¹®É¤uµ{¤å¥óªº¥N½X´N·|¥X²{¦b¿Ã¹õªºCode Editor(¥N½X½s¿è¾¹)¤¤¡C ¡@¡@¤@¯ë¤uµ{¤å¥óªº®æ¦¡¬°¡G¡@ ¡@¡@program¡@¡@ ¤uµ{¼ÐÃD; ¡@¡@ uses¡@¡@¡@¡@ ¤l¥y;¡@¡@µ{¦¡Åé¡@ ¡@¡@¦Ó DLLs¤uµ{¤å¥óªº®æ¦¡¬°¡G¡@¡@¡@ library ¤uµ{¼ÐÃD;¡@¡@ uses ¤l¥y;¡@¡@ exprots ¤l¥y;¡@¡@µ{¦¡Åé¡@ ¡@¡@¥¦Ì¥Dnªº°Ï§O¦³¨âÂI¡G ¡@¡@ 1.¤@¯ë¤uµ{¤å¥óªºÀY¼Ð¥ÎprogramÃöÁä¦r¡A¦ÓDLLs¤uµ{¤å¥óÀY¼Ð¥Îlibrary ÃöÁä¦r¡C¤£¦PªºÃöÁä¦r³qª¾½sĶ¾¹²£¥Í¤£¦Pªº¥i°õ¦æ¤å¥ó¡C¥ÎprogramÃöÁä¦r²£¥Íªº¬O.exe¤å¥ó¡A¦Ó¥ÎlibraryÃöÁä¦r²£¥Íªº¬O.dll¤å¥ó¡F¡@¡@2.°²¦pDLLsn¿é¥X¨Ñ¨ä¥¦À³¥Îµ{¦¡¨Ï¥Îªº¨ç¼Æ©Î¹Lµ{¡A«h¥²¶·±N³o¨Ç¨ç¼Æ©Î¹Lµ{¦C¦bexports¤l¥y¤¤¡C¦Ó³o¨Ç¨ç¼Æ©Î¹Lµ{¥»¨¥²¶·¥Îexport½sĶ«ü¥O¶i¦æ½sĶ¡C ¡@¡@®Ú¾Ú DLLs§¹¦¨ªº¥\¯à¡A§Ú̧âDLLs¤À¬°¦p¤Uªº¤TÃþ¡G1.§¹¦¨¤@¯ë¥\¯àªºDLLs¡F 2.¥Î©ó¼Æ¾Ú¥æ´«ªºDLLs¡F 3.¥Î©óµ¡Å髥ΪºDLLs¡C ¡@¡@³o¤@¸`§ÚÌ¥u°Q½×§¹¦¨¤@¯ë¥\¯àªºDLLs¡A¨ä¥¦¤º®e±N¦b«áÃ䪺¨â¸`¤¤°Q½×¡C¡@ 10.2.1.1 ½s¼g¤@¯ëDLLsªº¨BÆJ¡@ ¡@¡@½s¼g¤@¯ëDLLsªº¨BÆJ¦p¤U¡G ¡@¡@1.§Q¥ÎDelphiªºÀ³¥Îµ{¦¡¼ÒªO¡A«Ø¥ß¤@ÓDLLsµ{¦¡®Ø¬[¡C ¡@¡@¹ï©óDelphi 1.0ªº¥Î¤á¡A¥Ñ©ó¨S¦³DLLs¼ÒªO¡A¦]¦¹¡G ¡@¡@(1).«Ø¥ß¤@Ó¤@¯ëªºÀ³¥Îµ{¦¡¡A¨Ã¥´¶}¤uµ{¤å¥ó¡F ¡@¡@(2).²¾¥hµ¡Åé©M¬ÛÀ³ªº¥N½X³æ¤¸¡F ¡@¡@(3).¦b¤uµ{¤å¥ó¤¤¡A§âprogram§ï¦¨library¡A²¾¥hUses¤l¥y¤¤ªºForms¡A¨Ã¥[¤J¾A·íªº®w³æ¤¸¡]¤@¯ëSysUtils¡BClasses¬O»Ýnªº¡^¡A§R¥hbegin...end¤§¶¡ªº©Ò¦³¥N½X¡C ¡@¡@2.¥H¾A·íªºÀÉ®×¼Ðñ«O«ù¤å¥ó¡A¦¹®Élibrary«á¸òªº®w¦W¦Û°Êקï¡F ¡@¡@3.¿é¤J¹Lµ{¡B¨ç¼Æ¥N½X¡C¦pªG¹Lµ{¡B¨ç¼Æ·Ç³Æ¨Ñ¨ä¥¦À³¥Îµ{¦¡©I¥s¡A«h¦b¹Lµ{¡B¨ç¼ÆÀY«á¥[¤Wexport ½sĶ«ü¥Ü¡F ¡@¡@4.«Ø¥ßexports¤l¥y¡A¥]§t¨Ñ¨ä¥¦À³¥Îµ{¦¡©I¥sªº¨ç¼Æ©M¹Lµ{¦W¡C¥i¥H§Q¥Î¼Ð·Ç«ü¥Ü name ¡BIndex¡Bresident¥H¤è«K©M¥[³t¹Lµ{/¨ç¼Æªº©I¥s¡F ¡@¡@5.¿é¤J®wªì©l¤Æ¥N½X¡C³o¤@¨B¬O¥i¿ïªº¡F ¡@¡@6.½sĶµ{¦¡¡A²£¥Í°ÊºAÁåµ²®w¤å¥ó¡C¡@ 10.2.1.2 °ÊºAÁåµ²®w¤¤ªº¼Ð·Ç«ü¥Ü¡@ ¡@¡@¦b°ÊºAÁåµ²®wªº¿é¥X³¡¤À¡A¥Î¨ì¤F¤TӼзǫü¥Ü¡Gname¡BIndex¡Bresident¡C ¡@¡@1.name ¡@¡@ name«á±±µ¤@Ó¦r¤¸¦ê±`¼Æ¡A§@¬°¸Ó¹Lµ{©Î¨ç¼Æªº¿é¥X¦W¡C¦p¡G¡@exports InStr name MyInstr; ¡@¡@¨ä¥¦À³¥Îµ{¦¡±N¥Î·s¦W¦r (MyInstr)©I¥s¸Ó¹Lµ{©Î¨ç¼Æ¡C¦pªG¤´§Q¥Îì¨Óªº¦W¦r(InStr)¡A«h¦bµ{¦¡°õ¦æ¨ì¤Þ¥ÎÂI®É·|¤Þµo¤@Ó¨t²Î¿ù»~¡C¡@¡@ 2.Index¡@¡@ Index«ü¥Ü¬°¹Lµ{©Î¨ç¼Æ¤À°t¤@Ó¶¶§Ç¸¹¡C¦pªG¤£¨Ï¥ÎIndex«ü¥Ü¡A«h¥Ñ½sĶ¾¹«ö¶¶§Ç¶i¦æ¤À°t¡C¡@¡@ Index«á©Ò±µ¼Æ¦rªº½d³ò¬°1...32767¡C¨Ï¥ÎIndex¥i¥H¥[³t©I¥s¹Lµ{¡C¡@¡@ 3.resident¡@¡@¨Ï¥Î resident¡A«h·íDLLs¸ü¤J®É¯S©wªº¿é¥X¸ê°T©l²×«O«ù¦b°O¾ÐÅ餤¡C³o¼Ë·í¨ä¥¦À³¥Îµ{¦¡©I¥s¸Ó¹Lµ{®É¡A¥i¥H¤ñ§Q¥Î¦W¦r±½´yDLL¤J¤f°§C®É¶¡¶}¾P¡C¡@¡@¹ï©ó¨º¨Ç¨ä¥¦À³¥Îµ{¦¡±`±`n©I¥sªº¹Lµ{©Î¨ç¼Æ¡A¨Ï¥Î resident«ü¥Ü¬O¦X¾Aªº¡C¨Ò¦p¡G¡@exports InStr name MyInStr resident;¡@ 10.2.1.3 DLLs¤¤ªºÅܼƩM¬q¡@ ¤@ÓDLLs¾Ö¦³¦Û¤vªº¼Æ¾Ú¬q(DS)¡A¦]¦Ó¥¦Án©úªº¥ô¦óÅܼƳ£¬°¦Û¤v©Ò¨p¦³¡C©I¥s¥¦ªº¼Ò¸s²Õ¤£¯àª½±µ¨Ï¥Î¥¦©w¸qªºÅܼơCn¨Ï¥Î¥²¶·³q¹L¹Lµ{©Î¨ç¼Æ¤¶±¤~¯à§¹¦¨¡C¦Ó¹ïDLLs¨Ó»¡¡A¥¦¥Ã»·³£¨S¦³¾÷·|¨Ï¥Î©I¥s¥¦ªº¼Ò¸s²Õ¤¤Án©úªºÅܼơC ¡@¡@¤@ÓDLLs¨S¦³¦Û¤vªº°ïÅ|¬q(SS)¡A¥¦¨Ï¥Î©I¥s¥¦ªºÀ³¥Îµ{¦¡ªº°ïÅ|¡C¦]¦¹¦bDLL¤¤ªº¹Lµ{¡B¨ç¼Æµ´¹ï¤£n°²©wDS = SS¡C¤@¨Ç»y¨¥¦b¤p¼Ò¦¡½sĶ¤U¦³³oºØ°²³]¡A¦ý¨Ï¥ÎDelphi¥i¥HÁקK³oºØ±¡ªp¡CDelphiµ´¤£·|²£¥Í°²©wDS = SSªº¥N½X¡ADelphiªº¥ô¦ó°õ¦æ®É¶¡®w¹Lµ{/¨ç¼Æ¤]³£¤£§@³oºØ°²©w¡C»Ýª`·Nªº¬O¦pªGŪªÌ·Q´O¤J¸s¸s²Õ¦X»y¨¥¥N½X¡Aµ´¤£n¨ÏSS©MDSµn¤J¦P¤@ÓÈ¡C¡@ 10.2.1.4 DLLs¤¤ªº°õ¦æ®É¶¡¿ù©M³B²z¡@ ¡@¡@¥Ñ©óDLLsµLªk±±¨îÀ³¥Îµ{¦¡ªº°õ¦æ¡A¾ÉP«ÜÃø¶i¦æ²§±`³B²z¡A¦]¦¹½s¼gDLLs®Én¤Q¤À¤p¤ß¡A¥H½T«O³Q©I¥s®É¯à¥¿±`°õ¦æ ¡C·íDLLs¤¤µo¥Í¤@Ó°õ¦æ®É¶¡¿ù®É¡A¬ÛÀ³DLLs¨Ã¤£¤@©w±q°O¾ÐÅ餤²¾¥h¡]¦]¬°¦¹®É¨ä¥¦À³¥Îµ{¦¡¥i¯à¥¿¦b¥Î¥¦¡^¡A¦Ó©I¥sDLLsªºµ{¦¡²§±`¤¤¤î¡C³o¼Ë³y¦¨ªº°ÝÃD¬O·íDLLs¤w³Qקï¡A«·s¶i¦æ©I¥s®É¡A°O¾ÐÅ餤«O¯dªº¤´µM¥i¯à¬O¥H«eªºª©¥»¡Aקï«áªºµ{¦¡¨Ã¨S¦³±o¨ìÅçÃÒ¡C¹ï©ó³oÓ°ÝÃD¡A¦³¥H¤U¨âºØ¸Ñ¨M¤èªk¡G ¡@¡@1.¦bµ{¦¡ªº²§±`³B²z³¡¤ÀÅ㦡±NDLL¨ø¥X°O¾ÐÅé¡F ¡@¡@2.§¹¥þµ²§ôWindows¡A¦Ó«á«·s±Ò°Ê¡A°õ¦æ¬ÛÀ³ªºµ{¦¡¡C ¡@¡@¦P¤@¯ëªºÀ³¥Îµ{¦¡¬Û¤ñ¡ADLL¤¤°õ¦æ®É¶¡¿ùªº³B²z¬O«Ü§xÃøªº¡A¦Ó³y¦¨ªº«áªG¤]§ó¬°ÄY«¡C¦]¦¹n¨Dµ{¦¡³]pªÌ¦b½s¼g¥N½X®Én¦³¥R¤À¡B©P¨ìªº¦Ò¼{¡C¡@ 10.2.1.5 ®wªì©l¤Æ¥N½Xªº½s¼g¡@ ¡@¡@¶Ç²ÎWindows¤¤°ÊºAÁåµ²®wªº½s¼g¡A»Ýn¨âӼзǨç¼Æ¡GLibMain©MWEP¡A¥Î©ó±Ò°Ê©MÃö³¬DLL¡C¦bLibMain¤¤¡A¥i¥H°õ¦æ¶}ÂêDLL¼Æ¾Ú¬q¡B¤À°t°O¾ÐÅé¡Bªì©l¤ÆÅܼƵ¥ªì©l¤Æ¤u§@¡F¦ÓWEP¦b±q°O¾ÐÅ餤²¾¥hDLLs«e³Q©I¥s¡A¤@¯ë¥Î©ó¶i¦æ¥²nªº²M²z¤u§@¡A¦pÄÀ©ñ°O¾ÐÅéµ¥¡CDelphi¥Î¦Û¤v¯S¦³ªº¤è¦¡¹ê²{¤F³o¨âӼзǨç¼Æªº¥\¯à¡C³o´N¬O¦b¤uµ{¤å¥ó¤¤ªºbegin...end³¡¤À¥[¤Jªì©l¤Æ¥N½X¡C©M¶Ç²ÎWindowsµ{¦¡³]p¤èªk¬Û¤ñ¡A¥¦ªº¥Dn¯S¦â¬O¡G ¡@¡@1.ªì©l¤Æ¥N½X¬O¥i¿ïªº¡C¤@¨Ç¥²nªº¤u§@¡]¦p¶}Âê¼Æ¾Ú¬q¡^¥i¥H¥Ñ¨t²Î¦Û°Ê§¹¦¨¡C©Ò¥H¤j³¡¤À±¡ªp¤U¥Î¤á¤£·|¯A¤Î¨ì¡F ¡@¡@2.¥i¥H³]©w¦hÓµ²§ô¹Lµ{¡Aµ²§ô®É«ö¶¶§Ç¨Ì¦¸³Q©I¥s¡F ¡@¡@3.LibMain©MWEP¹ï¥Î¤á³z©ú¡A¥Ñ¨t²Î¦Û°Ê©I¥s¡C ¡@¡@ªì©l¤Æ¥N½X§¹¦¨ªº¥Dn¤u§@¬O¡G ¡@¡@1.ªì©l¤ÆÅܼơB¤À°t¥þ§½°O¾ÐÅé¶ô¡Bµn¤Jµøµ¡ª«¥óµ¥ªì©l¤Æ¤u§@¡C¦b(10.3.2)¸`¡§§Q¥ÎDLLs¹ê²{À³¥Îµ{¦¡¶¡ªº¼Æ¾Ú¶Ç¿é¡¨¤¤¡A¥Î©ó¼Æ¾Ú¦@¨Éªº¥þ§½°O¾ÐÅé¶ô´N¬O¦bªì©l¤Æ¥N½X¤¤¤À°tªº¡C ¡@¡@2.³]©wDLLsµ²§ô®Éªº°õ¦æ¹Lµ{¡CDelphi¦³¤@Ó¹w©w¸qÅܼÆExitProc¥Î©ó«ü¦Vµ²§ô¹Lµ{ªº¦ì§}¡C¥Î¤á¥i¥H§â¦Û¤vªº¹Lµ{¦W½áµ¹ExitProc¡C¨t²Î¦Û°Ê©I¥sWEP¨ç¼Æ¡A§âExitProc«ü¦Vªº¦ì§}¨Ì¦¸½áµ¹WEP°õ¦æ¡Aª½¨ìExitProc¬°nil¡C ¡@¡@¤UÃ䪺¤@¬qµ{¦¡¥]§t¤@Óµ²§ô¹Lµ{©M¤@¬qªì©l¤Æ¥N½X¡A¥Î¨Ó±Ôz¦p¦ó¥¿½T³]©wµ²§ô¹Lµ{¡C¡@ library Test; {$S-} uses WinTypes, WinProcs; var SaveExit: Pointer;¡@ procedure LibExit; far; begin if ExitCode = wep_System_Exit then begin { ¨t²ÎÃö³¬®Éªº¬ÛÀ³³B²z } end else begin { DLL¨ø¥X®Éªº¬ÛÀ³³B²z } end; ExitProc := SaveExit; { «ì´_ì¨Óªºµ²§ô¹Lµ{«ü¼Ð } end;¡@ begin {DLLªºªì©l¤Æ¤u§@ } SaveExit := ExitProc; { ¦sÀÉì¨Óªºµ²§ô¹Lµ{«ü¼Ð } ExitProc := @LibExit; { ¸Ë³]·sªºµ²§ô¹Lµ{ } end. ¡@¡@¦bªì©l¤Æ¥N½X¤¤¡Aº¥ý§âì¨Óªºµ²§ô¹Lµ{«ü¼Ð¦sÀɨì¤@ÓÅܼƤ¤¡A¦Ó«á¦A§â·sªºµ²§ô¹Lµ{¦ì§}½áµ¹ ExitProc¡C¦Ó¦b¦Û©w¸qµ²§ô¹Lµ{LibExitµ²§ô®É¦A§âExitProcªºÈ«ì´_¡C¥Ñ©óExitProc¬O¤@Ó¨t²Î¥þ§½ÅܼơA©Ò¥H¦bµ²§ô®É«ì´_ì¨Óªºµ²§ô¹Lµ{¬O¥²nªº¡C¡@¡@µ²§ô¹Lµ{ LibExit¤¤¨Ï¥Î¤F¤@Ó¨t²Î©w¸qÅܼÆExitCode¡A¥Î©ó¼Ð»xµ²§ô®Éªºª¬ºA¡C ExitCodeªº¨úÈ»P·N¸q¦p¤U¡G¡@ªí10.1 ExitCodeªº¨úÈ»P·N¸q ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w ¨ú È ·N ¸q ?????????????????????????????????????????? ¡@¡@WEP_System_Exit WindowsÃö³¬¡@ WEP_Free_DLLx DLLs³Q¨ø¥X ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¡@ ¡@¡@µ²§ô¹Lµ{½sĶ®É¥²¶·Ãö³¬stack_checking¡A¦]¦Ó»Ý³]©w½sĶ«ü¥Ü {$S-} ¡C¡@ 10.2.1.6 ½s¼g¤@¯ëDLLsªºÀ³¥ÎÁ|¨Ò¡@ ¡@¡@¦b¤U±ªºµ{¦¡¤¤§Ú̧â¤@Ó¦r¤¸¦ê¾Þ§@ªº¨ç¼ÆÀx¦s¨ì¤@ÓDLLs¤¤¡A¥H«K»Ýnªº®ÉÔ©I¥s¥¦¡CÀ³¸Óª`·Nªº¤@ÂI¬O¡G¬°¤F«OÃÒ³oÓ¨ç¼Æ¥i¥H³Q¨ä¥¦»y¨¥½s¼gªºµ{¦¡©Ò©I¥s¡A§@¬°°Ñ¼Æ¶Ç»¼ªº¦r¤¸¦êÀ³¸Ó¬OµLµ²§ô²Åªº¦r¤¸¼Æ¸s¸s²Õ«¬¦¡(§YPChar«¬¦¡)¡A¦Ó¤£¬OObject Pascalªº±aµ²§ô²ÅªºSrting«¬¦¡¡Cµ{¦¡²M³æ¦p¤U¡G library Example; uses SysUtils, Classes; {ªð¦^¦r¤¸¦b¦r¤¸¦ê¤¤ªº¦ì¸m} function InStr(SourceStr: PChar;Ch: Char): Integer; export; var Len,i: Integer; begin Len := strlen(SourceStr); for i := 0 to Len-1 do if SourceStr[i] = ch then begin Result := i; Exit; end; Result := -1; end; exports Instr Index 1 name 'MyInStr' resident; begin end.¡@ 10.2.2 ©I¥sDLLs ¡@¡@¦³¨âºØ¤èªk¥i¥Î©ó©I¥s¤@ÓÀx¦s¦b DLLs¤¤ªº¹Lµ{¡C¡@¡@ 1.ÀRºA©I¥s©ÎÅã¥Ü¸Ë¸ü¡@¡@¨Ï¥Î¤@Ó¥~³¡Án©ú¤l¥y¡A¨Ï DLLs¦bÀ³¥Îµ{¦¡¶}©l°õ¦æ«e§Y³Q¸ü¤J¡C¨Ò¦p¡G¡@¡@¡@ function Instr(SourceStr : PChar;Check : Char); Integer; far; external 'UseStr';¡@¡@¨Ï¥Î³oºØ¤èªk¡Aµ{¦¡µLªk¦b°õ¦æ®É¶¡ùبM©w DLLsªº©I¥s¡C°²¦p¤@Ó¯S©wªºDLLs¦b°õ¦æ®ÉµLªk¨Ï¥Î¡A«hÀ³¥Îµ{¦¡±NµLªk°õ¦æ¡C¡@¡@ 2.°ÊºA©I¥s©ÎÁô¦¡¸Ë¸ü¡@¡@¨Ï¥Î Windows API¨ç¼ÆLoadLibray©MGetProcAddress¥i¥H¹ê²{¦b°õ¦æ®É¶¡ùذʺA¸Ë¸üDLLs¨Ã©I¥s¨ä¤¤ªº¹Lµ{¡C¡@¡@Yµ{¦¡¥u¦b¨ä¤¤ªº¤@³¡¤À©I¥s DLLsªº¹Lµ{¡A©ÎªÌµ{¦¡¨Ï¥ÎþÓDLLs¡A ©I¥s¨ä¤¤ªºþÓ¹Lµ{»Ýn®Ú¾Úµ{¦¡°õ¦æªº¹ê»Úª¬ºA¨Ó§PÂ_¡A¨º»ò¨Ï¥Î°ÊºA©I¥s´N¬O¤@ӫܦnªº¿ï¾Ü¡C¡@¡@¨Ï¥Î°ÊºA©I¥s¡A§Y¨Ï¸Ë¸ü¤@Ó DLLs¥¢±Ñ¤F¡Aµ{¦¡¤´¯àÄ~Äò°õ¦æ¡C¡@10.2.3 ÀRºA©I¥s ¡@¡@¦bÀRºA©I¥s¤@ÓDLLs¤¤ªº¹Lµ{©Î¨ç¼Æ®É¡Aexternal«ü¥Ü¼W¥[¨ì¹Lµ{©Î¨ç¼ÆªºÁn©ú»y¥y¤¤¡C³Q©I¥sªº¹Lµ{©Î¨ç¼Æ¥²¶·±Ä¥Î»·©I¥s¼Ò¦¡¡C³o¥i¥H¨Ï¥Îfar¹Lµ{«ü¥Ü©Î¤@Ó{$F +}½sĶ«ü¥Ü¡C ¡@¡@Delphi¥þ³¡¤ä´©¶Ç²ÎWindows°ÊºAÁåµ²®wµ{¦¡³]p¤¤ªº¤TºØ©I¥s¤è¦¡¡A¥¦Ì¬O¡G ¡@¡@¡´ ³q¹L¹Lµ{/¨ç¼Æ¦W ¡@¡@¡´ ³q¹L¹Lµ{/¨ç¼Æªº§O¦W ¡@¡@¡´ ³q¹L¹Lµ{/¨ç¼Æªº¶¶§Ç¸¹¡@ ¡@¡@³q¹L¹Lµ{©Î¨ç¼Æªº§O¦W©I¥s¡Aµ¹¥Î¤áµ{¦¡³]p´£¨Ñ¤FÆF¬¡©Ê¡A¦Ó³q¹L¶¶§Ç¸¹(Index)©I¥s¥i¥H´£°ª¬ÛÀ³DLLªº¸Ë¸ü³t«×¡C¡@ 10.2.4 °ÊºA©I¥s¡@ 10.2.4.1 °ÊºA©I¥s¤¤ªºAPI¨ç¼Æ¡@ ¡@¡@°ÊºA©I¥s¤¤¨Ï¥ÎªºWindows API¨ç¼Æ¥Dn¦³¤TÓ,§Y¡GLoadlibrary¡AGetProcAddress©MFreelibrary¡C ¡@¡@ 1.Loadlibrary: §â«ü©w®w¼Ò¸s²Õ¸ü¤J°O¾ÐÅé ¡@¡@»yªk¬°¡G¡@ ¡@¡@function Loadlibrary(LibFileName: PChar): THandle;¡@ LibFileName«ü©w¤Fn¸Ë¸üDLLsªºÀÉ®×¼Ðñ¡A¦pªGLibFileName¨S¦³¥]§t¤@Ó¸ô®|¡A«hWindows«ö¤Uz¶¶§Ç¶i¦æ§ä¨ì¡G ¡@¡@(1)¥Ø«e¤u§@¥Ø¿ý¡F ¡@¡@(2)Windows¥Ø¿ý(¥]§twin.comªº¥Ø¿ý)¡C¨ç¼ÆGetWindowDirectoryªð¦^³o¤@¥Ø¿ýªº¸ô®|¡F ¡@¡@(3)Windows¨t²Î¥Ø¿ý(¥]§t¨t²Î¤å¥ó¦pgdi.exeªº¥Ø¿ý)¡C¨ç¼ÆGetSystemDirectoryªð¦^³o¤@¥Ø¿ýªº¸ô®|¡F ¡@¡@(4)¥]§t¥Ø«e¥ô°È¥i°õ¦æ¤å¥óªº¥Ø¿ý¡C§Q¥Î¨ç¼ÆGetModuleFileName¥i¥Hªð¦^³o¤@¥Ø¿ýªº¸ô®|¡F ¡@¡@(5)¦C¦bPATHÀô¹ÒÅܼƤ¤ªº¥Ø¿ý¡F ¡@¡@(6)ºô¸ôªº¬M¶H¥Ø¿ý²M³æ¡C ¡@¡@¦pªG¨ç¼Æ°õ¦æ¦¨¥\¡A«hªð¦^¸Ë¸ü®w¼Ò¸s²Õªº¹ê¨Ò¥y¬`¡C§_«h¡Aªð¦^¤@Ó¤p©óHINSTANCE_ERRORªº¿ù»~¥N½X¡C¿ù»~¥N½Xªº·N¸q¦p¤Uªí¡G¡@ ¡@¡@ ªí10.2 Loadlibraryªð¦^¿ù»~¥N½Xªº·N¸q ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w ¿ù»~¥N½X¡@¡@¡@¡@¡@¡@¡@¡@¡@·N¡@¡@¡@¡@¡@¡@¡@¡@¸q ???????????????????????????????????????????????????????????????????????????? ¡@¡@¡@ 0 ¨t²Î°O¾ÐÅ餣°÷¡A¥i°õ¦æ¤å¥ó³Q¯}Ãa©Î©I¥s«Dªk ¡@¡@¡@ 2 ¤å¥ó¨S¦³³Qµo²{ ¡@¡@¡@ 3 ¸ô®|¨S¦³³Qµo²{ ¡@¡@¡@ 5 ¥ø¹Ï°ÊºAÁåµ²¤@Ó¥ô°È©ÎªÌ¦³¤@Ó¦@¨É©Îºô¸ô«OÅ@¿ù ¡@¡@¡@ 6 ®w»Ýn¬°¨CÓ¥ô°È«Ø¥ß¤ÀÂ÷ªº¼Æ¾Ú¬q ¡@¡@ ¡@ 8 ¨S¦³¨¬°÷ªº°O¾ÐÅé±Ò°ÊÀ³¥Îµ{¦¡ ¡@¡@ 10 Windowsª©¥»¤£¥¿½T ¡@¡@¡@ 11 ¥i°õ¦æ¤å¥ó«Dªk¡C©ÎªÌ¤£¬OWindowsÀ³¥Îµ{¦¡¡A©ÎªÌ¦b.EXE¬M ¡@¡@ ¡@¡@ ¹³¤¤¦³¿ù»~ ¡@¡@¡@ 12 À³¥Îµ{¦¡¬°¤@Ó¤£¦Pªº§@·~¨t²Î³]p(¦pOS/2µ{¦¡) 13 À³¥Îµ{¦¡¬°MS DOS4.0³]p ¡@¡@¡@ 14 ¥i°õ¦æ¤å¥óªº«¬¦¡¤£ª¾¹D ¡@¡@¡@ 15 ¸Õ¹Ï¸Ë¸ü¤@Ó¹ê¼Ò¦¡À³¥Îµ{¦¡(¬°¦´ÁWindowsª©¥»³]p) 16 ¸Õ¹Ï¸Ë¸ü¥]§t¥i¼gªº¦hӼƾڬqªº¥i°õ¦æ¤å¥óªº²Ä¤GÓ¹ê¨Ò ¡@¡@¡@ 19 ¸Õ¹Ï¸Ë¸ü¤@ÓÀ£ÁYªº¥i°õ¦æ¤å¥ó¡C¤å¥ó¥²¶·³Q¸ÑÀ£«á¤~¯à³Q¸Ëµô ¡@¡@¡@ 20 °ÊºAÁåµ²®w¤å¥ó«Dªk ¡@¡@¡@ 21 À³¥Îµ{¦¡»Ýn32¦ìÂX®i ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w ¡@¡@°²¦p¦bÀ³¥Îµ{¦¡¥Î Loadlibrary©I¥s¬Y¤@¼Ò¸s²Õ«e¡A¨ä¥¦À³¥Îµ{¦¡¤w§â¸Ó¼Ò¸s²Õ¸ü¤J°O¾ÐÅé¡A«hLoadlibrary¨Ã¤£·|¸Ë¸ü¸Ó¼Ò¸s²Õªº¥t¤@¹ê¨Ò¡A¦Ó¬O¨Ï¸Ó¼Ò¸s²Õªº¡§¤Þ¥Îp¼Æ¡¨¥[1¡C¡@¡@¡@ 2.GetProcAddress¡G¾ß¨úµ¹©w¼Ò¸s²Õ¤¤¨ç¼Æªº¦ì§}¡@¡@»yªk¬°¡G¡@ ¡@¡@ function GetProcAddress(Module: THandle; ProcName: PChar): TFarProc;¡@Module¥]§t³Q©I¥sªº¨ç¼Æ®w¼Ò¸s²Õªº¥y¬`¡A³oÓÈ¥ÑLoadlibraryªð¦^¡C¦pªG§âModule³]©w¬°nil¡A«hªí¥Ün¤Þ¥Î¥Ø«e¼Ò¸s²Õ¡C ¡@¡@ProcName¬O«ü¦V§t¦³¨ç¼Æ¦Wªº¥Hnilµ²§Àªº¦r¤¸¦êªº«ü¼Ð¡A©ÎªÌ¤]¥i¥H¬O¨ç¼Æªº¦¸§ÇÈ¡C¦pªGProcName°Ñ¼Æ¬O¦¸§ÇÈ¡A«h¦pªG¸Ó¦¸§ÇȪº¨ç¼Æ¦b¼Ò¸s²Õ¤¤¨Ã¤£¦s¦b®É¡AGetProcAddress¤´ªð¦^¤@Ó«DnilªºÈ¡C³o±N¤Þ°_²V¶Ã¡C¦]¦¹¤j³¡¤À±¡ªp¤U¥Î¨ç¼Æ¦W¬O¤@ºØ§ó¦nªº¿ï¾Ü¡C¦pªG¥Î¨ç¼Æ¦W¡A«h¨ç¼Æ¦Wªº«÷¼g¥²¶·»P°ÊºAÁåµ²®w¤å¥óEXPORTS¸`¤¤ªº¹ïÀ³«÷¼g¬Û¤@P¡C ¡@¡@¦pªGGetProcAddress°õ¦æ¦¨¥\¡A«hªð¦^¼Ò¸s²Õ¤¤¨ç¼Æ¤J¤f³Bªº¦ì§}¡A§_«hªð¦^nil¡C 3.Freelibrary¡G±q°O¾ÐÅ餤²¾¥X®w¼Ò¸s²Õ ¡@¡@»yªk¬°¡G¡@ ¡@¡@procedure Freelibrary(Module : THandle);¡@ Module¬°®w¼Ò¸s²Õªº¥y¬`¡C³oÓÈ¥ÑLoadlibraryªð¦^¡C ¡@¡@¥Ñ©ó®w¼Ò¸s²Õ¦b°O¾ÐÅ餤¥u¸Ë¸ü¤@¦¸¡A¦]¦Ó©I¥sFreelibraryº¥ý¨Ï®w¼Ò¸s²Õªº¤Þ¥Îp¼Æ´î¤@¡C¦pªG¤Þ¥Îp¼Æ´î¬°0¡A«h¨ø¥X¸Ó¼Ò¸s²Õ¡C ¡@¡@¨C©I¥s¤@¦¸Loadlibrary´NÀ³©I¥s¤@¦¸FreeLibray¡A¥H«OÃÒ¤£·|¦³¦h¾lªº®w¼Ò¸s²Õ¦bÀ³¥Îµ{¦¡µ²§ô«á¤´¯d¦b°O¾ÐÅ餤¡C¡@ 10.2.4.2 °ÊºA©I¥sÁ|¨Ò¡@ ¡@¡@¹ï©ó°ÊºA©I¥s¡A§ÚÌÁ|¤F¦p¤Uªº¤@Ó²³æ¨Ò¤l¡C¨t²Î¤@¦@¥]§t¨âÓ½s¿è®Ø¡C¦b²Ä¤@Ó½s¿è®Ø¤¤¿é¤J¤@Ó¦r¤¸¦ê¡A¦Ó«á¦b²Ä¤GÓ½s¿è®Ø¤¤¿é¤J¦r¤¸¡C¦pªG¸Ó¦r¤¸¥]§t¦b²Ä¤@Ó½s¿è®Øªº¦r¤¸¦ê¤¤¡A«h¼ÐÅÒ®ØÅã¥Ü¸ê°T¡G¡§¦ì©ó²Än¦ì¡C¡¨¡A§_«hÅã¥Ü¸ê°T¡G¡§¤£¥]§t³oÓ¦r¤¸¡C¡¨¡C¦p¹Ï¬Oµ{¦¡ªº°õ¦æ¤¶±¡C ¿é¤JÀˬd¥\¯àªº¹ê²{¦bEdit2ªºOnKeyPress¨Æ¥ó³B²z¹Lµ{¤¤¡Aµ{¦¡²M³æ¦p¤U¡C¡@ procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); var order: Integer; txt: PChar; PFunc: TFarProc; Moudle: THandle; begin Moudle := Loadlibrary('c:\dlls\example.dll'); if Moudle > 32 then begin Edit2.text := ''; Pfunc := GetProcAddress(Moudle,'Instr'); txt := StrAlloc(80); txt := StrPCopy(txt,Edit1.text); Order := TInstr(PFunc)(txt,Key); if Order = -1 then Label1.Caption := '¤£¥]§t³oÓ¦r¤¸ ' else Label1.Caption := '¦ì©ó²Ä'+IntToStr(Order+1)+'¦ì'; end; Freelibrary(Moudle); end; ¡@¡@¦b§Q¥ÎGetProcAddessªð¦^ªº¨ç¼Æ«ü¼Ð®É¡A¥²¶·¶i¦æ±j¨î«¬¦¡Âà´«¡G¡@ Order := TInstr(PFunc)(text,Key); ¡@¡@TInStr¬O¤@Ó©w¸q¦n¤Fªº¨ç¼Æ«¬¦¡¡G¡@ type TInStr = function(Source: PChar;Check: Char): Integer;¡@ 10.3 §Q¥ÎDLLs¹ê²{¼Æ¾Ú¶Ç¿é¡@ 10.3.1 DLLs¤¤ªº¥þ§½°O¾ÐÅé¡@ ¡@¡@Windows³W©w¡GDLLs¨Ã¤£¾Ö¦³¥¦¥´¶}ªº¥ô¦ó¤å¥ó©Î¥¦¤À°tªº¥ô¦ó¥þ§½°O¾ÐÅé¶ô¡C³o¨Çª«¥ó¥Ñª½±µ©Î¶¡±µ©I¥sDLLsªºÀ³¥Îµ{¦¡¾Ö¦³¡C³o¼Ë¡A·íÀ³¥Îµ{¦¡¤¤¤î®É¡A¥¦¾Ö¦³ªº¥´¶}ªº¤å¥ó¦Û°ÊÃö³¬¡A¥¦¾Ö¦³ªº¥þ§½°O¾ÐÅé¶ô¦Û°ÊÄÀ©ñ¡C³o´N·N¨ýµÛ¦sÀɦbDLLs¥þ§½ÅܼƤ¤ªº¤å¥ó©M¥þ§½°O¾ÐÅé¶ôÅܼƦbDLLs¨S¦³³Q³qª¾ªº±¡ªp¤U´NÅܬ°«Dªk¡C³o±Nµ¹¨ä¥¦¨Ï¥Î¸ÓDLLsªºÀ³¥Îµ{¦¡³y¦¨§xÃø¡C ¡@¡@¬°¤FÁקK¥X²{³oºØ±¡ªp¡A¤å¥ó©M¥þ§½°O¾ÐÅé¶ô¥y¬`¤£À³§@¬°DLLsªº¥þ§½ÅܼơA¦Ó¬O§@¬°DLLs¤¤¹Lµ{©Î¨ç¼Æªº°Ñ¼Æ¶Ç»¼µ¹DLLs¨Ï¥Î¡C©I¥sDLLsªºÀ³¥Îµ{¦¡À³¸Ót³d¹ï¥¦ÌªººûÅ@¡C ¡@¡@¦ý¦b¯S©w±¡ªp¤U¡ADLLs¤]¥i¥H¾Ö¦³¦Û¤vªº¥þ§½°O¾ÐÅé¶ô¡C³o¨Ç°O¾ÐÅé¶ô¥²¶·¥Îgmem_DDEShareÄݩʶi¦æ¤À°t¡C³o¼Ëªº°O¾ÐÅé¶ôª½¨ì³QDLLsÅã¥ÜÄÀ©ñ©ÎDLLsµ²§ô®É³£«O«ù¦³®Ä¡C ¡@¡@¥ÑDLLsºÞ²zªº¥þ§½°O¾ÐÅé¶ô¬OÀ³¥Îµ{¦¡¶¡¶i¦æ¼Æ¾Ú¶Ç¿éªº¤S¤@³~®|¡A¤U±§Ú̱N±Mªù°Q½×³o¤@°ÝÃD¡C¡@ 10.3.2 §Q¥ÎDLLs¹ê²{À³¥Îµ{¦¡¶¡ªº¼Æ¾Ú¶Ç¿é¡@ ¡@¡@§Q¥ÎDLLs¹ê²{À³¥Îµ{¦¡¶¡ªº¼Æ¾Ú¶Ç¿éªº¨BÆJ¬°¡G ¡@¡@1. ½s¼g¤@ÓDLLsµ{¦¡¡A¨ä¤¤¾Ö¦³¤@Ó¥Îgmem_DDEShareÄݩʤÀ°tªº¥þ§½°O¾ÐÅé¶ô¡F ¡@¡@2. ¦øªA¾¹µ{¦¡©I¥sDLLs¡A¦V¥þ§½°O¾ÐÅé¶ô¼g¤J¼Æ¾Ú¡F ¡@¡@3. ¥Î¤áµ{¦¡©I¥sDLLs¡A±q¥þ§½°O¾ÐÅé¶ôŪ¨ú¼Æ¾Ú¡C¡@ 10.3.2.1 ¥Î©ó¹ê²{¼Æ¾Ú¶Ç¿éªºDLLsªº½s¼g¡@ ¡@¡@¥Î©ó¹ê²{¼Æ¾Ú¶Ç¿éªºDLLs»P¤@¯ëDLLsªº½s¼g°ò¥»¬Û¦P¡A¨ä¤¤¯S§Oªº¦a¤è¬O¡G ¡@¡@1. ©w¸q¤@Ó¥þ§½Åܼƥy¬`¡G¡@ var hMem: THandle; ¡@¡@2. ©w¸q¤@Ó¹Lµ{¡Aªð¦^¸Ó¥þ§½Åܼƪº¥y¬`¡C¸Ó¹Lµ{n¥]§t¦bexports¤l¥y¤¤¡C¦p¡G¡@ function GetGlobalMem: THandle; export; begin Result := hMem; end; ¡@¡@3. ¦bªì©l¤Æ¥N½X¤¤¤À°t¥þ§½°O¾ÐÅé¶ô¡G µ{¦¡²M³æ¦p¤U¡G¡@ begin hMem := GlobalAlloc(gmem_MOVEABLE and gmem_DDEShare,num); if hMem = 0 then MessageDlg('Could not allocate memory',mtWarning,[mbOK],0); end. ¡@¡@num¬O¤@Ó¹w©w¸qªº±`¼Æ¡C Windows API¨ç¼ÆGlobalAlloc¥Î©ó±q¥þ§½°O¾ÐÅé°ï¤¤¤À°t¤@¶ô°O¾ÐÅé¡A¨Ãªð¦^¸Ó°O¾ÐÅé¶ôªº¥y¬`¡C¸Ó¨ç¼Æ¥]¬A¨âӰѼơA²Ä¤@ӰѼƥΩó³]©w°O¾ÐÅé¶ôªº¤À°t¼Ð»x¡C¥i¥H¨Ï¥Îªº¤À°t¼Ð»x¦p¤Uªí©Ò¥Ü¡C ªí10.3 ¥þ§½°O¾ÐÅé¶ôªº¤À°t¼Ð»x ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w ¼Ð §Ó ·N ¸q ?????????????????????????????????????????????????????????????????? gmem_DDEShare ¤À°t¥i¥ÑÀ³¥Îµ{¦¡¦@¨Éªº°O¾ÐÅé gmem_Discardable ¤À°t¥i©ß±óªº°O¾ÐÅé(¥u»Pgmem_Moveable³s¥Î) gmem_Fixed ¤À°t©T©w°O¾ÐÅé gmem_Moveable ¤À°t¥i²¾°Êªº°O¾ÐÅé gmem_Nocompact ¸Ó¥þ§½°ï¤¤ªº°O¾ÐÅ餣¯à³QÀ£ÁY©Î©ß±ó gmem_Nodiscard ¸Ó¥þ§½°ï¤¤ªº°O¾ÐÅ餣¯à³Q©ß±ó gmem_NOT_Banked ¤À°t¤£¯à³Q¤À¬qªº°O¾ÐÅé gmem_Notify ³qª¾¥\¯à¡C·í¸Ó°O¾ÐÅé³Q©ß±ó®É©I¥sGlobalNotify¨ç¼Æ gmem_Zeroinit ±N©Ò¤À°t°O¾ÐÅé¶ôªº¤º®eªì©l¤Æ¬°¹s ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¡@ ¡@¡@¦³¨âÓ¹w©w¸qªº±`¥Î¸s¸s²Õ¦X¬O¡G GHND = gmem_Moveable and gmem_Zeroinit GPTK = gmem_Fixed and gmem_Zeroinit ¡@¡@²Ä¤GӰѼƥΩó³]©w±ý¤À°tªº¦ì¤¸¸s²Õ¼Æ¡C¤À°tªº¦ì¤¸¸s²Õ¼Æ¥²¶·¬O32ªº¿¼Æ¡A¦]¦Ó¹ê»Ú¤À°tªº¦ì¤¸¸s²Õ¼Æ¥i¯à¤ñ©Ò³]©wªºn¤j¡C ¡@¡@¥Ñ©ó¥Îgmem_DDEShare¤À°tªº°O¾ÐÅé¦b¤À°t°O¾ÐÅ骺¼Ò¸s²Õ²×¤î®É¦Û°Ê©ß±ó¡A¦]¦Ó¤£¥²©I¥sGlobalFreeÅ㦡ÄÀ©ñ°O¾ÐÅé¡C ¡@ |
«á¤@¶ «e¤@¶ ¦^¥Ø¿ý ¦^º¶ |