¹C«È:  µù¥U | µn¿ý | ·j¯Á | À°§U | VIPÃÙ§U¥»¯¸ | ¥ZµnÃÙ§U¼s§i | ³]¬°­º­¶ | ¥[¤J¦¬Âà | ÁcÅ餤¤å

 

your gf Ú»­ø¨ì¤ù ¥î¼äóa ¤£¯à³X°ÝSOPCAST­¶­± ¶Â¦â­I´º ¤ÑÀs¤K³¡·tª÷Ä_ ¸Ý¥Ponline©xºô ¤p¤t¬ü ½u¤WH°Êµe §K¶O§Y®É³ø»ù ªá¼Ë¤Ö¦~¤Ö¤k¢ê¢ü ¤Ó»×¥ß§Ó¶Ç ¤H¶¡¤¿¾¹º©µe Hebe·s¾v«¬ Media calssic I miss you³¯¬f¦t seed H LostPlanet¯}¸Ñ ¤Ñ°ó¨pªA³Ü¤ôµ{¦¡ ¤Ñ¥~2 online ¯]®ü®á®³¤p©j¥þ®M

 




·j¯Á¿ï¶µ ¯Á¤Þ¨t²Î¤u¨ãµ¡
 
¼ÐÃD: §@·~¨t²Î¤¤COM
http://manyway.net ÃÙ§Uºô¯¸¸ü¤J¤¤...
chan0006
ºaÅA²z¨Æ
Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7
¹q¸£¦a±a°Ï¥D

ºaÅA¾±³¹ ¥Ø«e¨S¦³¾±³¹

UID¡G 460360

©Ê§O¡G ¨k

ºëµØ¡G 3 ½g

¿n¤À¡G 2593 ÂI

©«¤l¡G 1863 ½g

  ¤j ¤¤ ¤p
µoªí©ó 2007-4-11 16:27  ¸ê®Æ  ­Ó¤HªÅ¶¡  ¥D­¶ µu®ø®§  ¥[¬°¦n¤Í  ²K¥[ chan0006 ¬°MSN¦n¤Í ³q¹LMSN©M chan0006 ¥æ½Í QQ

§@·~¨t²Î¤¤COM ±z¬O²Ä 342­ÓÂsÄýªÌ

§@ªÌ¡G´¹´¹
tufeiping@vip.sina.com

¦b²{¦b¥H¤Î¥¼¨Óªº§@·~¨t²Î¤¤COM¡]¤¸¥óª«¥ó½d¥»¡^§Þ³N¦û¦³ªº¤ñ¨Ò¶V¨Ó¶V¤j¤F¡I
COM¬O¤°»ò©O¡H§A¥i¥H²z¸Ñ¥¦¬°ª«¥ó©Ê½èªºAPI¡]°Ï§O©ó¨ç¼Æ©Ê½èªºAPI¡^¡A¦]¬°¤@¯ë¨ç¼Æ©Ê½èªºAPI½Õ¥Î¬O³o¼Ëªº¡GSendmessage(handle,msgunit,wparam.lparam);¦Ó¹ï©óCOM¤¤ªº¤èªk¡]³oùاï¥s¤èªk¤F¡^½Õ¥Î¬O³o¼Ëªº¡GShellLink.SetPath(pchar(filepath));¦b³oùØ¥i¥HÁ¿ShellLink¬Ý§@¤@­Óª«¥ó¡A¦ÓSetPath¬O³o­Óª«¥ó²³¦h¤èªk¤¤ªº¤@­Ó¡A§Ú­Ì¥i¥H³o¼Ë¥Í¦¨¤@­Óª«¥ó¡G


var
ShellLink:IShellLink;//Án©ú¤@­Ó¤¶­±Ãþ«¬ªº«ü¼ÐÅܼơA¨ä¤¤IShellLink¬O¤w¸g©w¸q¦nªº¤¶­±Ãþ«¬¡]¥¦¬O­Ó¨t²Î´£¨Ñªº¤@­Ó¤¶­±¡^


begin
CoCreateInstance(CLSID_ShellLink,nil,CLSID_INPROC_SERVER,IID_IshelllinkA,shelllink)


©ÎªÌ¡G



ShellLink:=CreateComObject(CLSID_ShellLink) AS IShellLink;


µM«á´N¥i¥H½Õ¥Î¨ä¤¤ªº¤èªk¤F¡C¶H³o¼Ëªº½Õ¥Î¤èªk¥Î¹LDirectX¡]°Ï§O©ó¤@¯ëGUI®wªº¥Î¤á¹Ï¹³³B²z®w¡A¦b¹CÀ¸¶}µo¤¤¦û¦³·¥¨ä­«­nªº¦ì¸m¡^ªB¤Í¤@©w«D±`¼ô±x¤F¡A¦]¬°DirectX¥»¨Ó´N¬O·L³n±À¥Xªº²Ä¤@­ÓCOMÀ³¥Î¹À¡I¨º»ò¥¦¨ì©³¬O«ç»ò¤u§@ªº©O¡H·Q¥²«Ü¦hªì¾ÇCOMªºªB¤Í¤@©w«Ü·Qª¾¹D§a¡H§Ú¶}©l¾Çªº®É­Ô´N·Qª¾¹D¨ä¤¤ªº¾÷²z¡A¦ý«Ü¦h®Ñ³£Á¿±o¤£¬O«Ü²M·¡¡A«á¨Ó¶R¤F¥»<COM/DCOMºë³q>¤~ºâ¬O¬Ý©ú¥Õ¤F¡A¤£¹L¥¦¬OC++»y¨¥ªº¡A©Ò¥H³oùاڵ²¦XDelphi¤¤ªº·½¥N½X¨ÓÁ¿¤@¤U¨ä¤¤ªº¤u§@¾÷¨î¡I


¤£¹L¹ïŪªÌ¦³­Ó­n¨D¡G


§A¥²¶·ª¾¹DCOM¬O¤°»ò¥H¤Î¦b¨Ï¥Î¬O¦p¦ó½Õ¥Î¡]¤]´N¬O§A¨Ï¥Î¹LCOM¡A¦ý¤£¬O«ÜÀ´¡^¡C


1.COMªº·§©À¤Î§@¥Î¡G


COM¬O¤@ºØ¦øªA¾¹¡A¥¦±N¦Û¤vªºªA°È¥]¸Ë¦b¤@­Ó®w¤¤¡A¨Ã¥B¦Û¤v¥H¤@­Óª«¥ó§Î¦¡¥X²{¡A¦Ó¨ä¤¤ªº¤l¨ç¼Æ¥s°µ¥¦ªº¤èªk¡C¥¦ªº¥þºÙ¬OComponent Object Module¤¸¥óª«¥ó½d¥»¡A¥¦¬O´£¨Ñ¤@ºØ¤G¶i¦ì¼h­±¡]³Ì©³¼h¡^ªº¦@¥Î¤â¬q¡A¥Ñ©ó¨ä¬O¦b¤G¶i¦ì¼h­±¤W´£¨Ñ¦@¥Î¡A©Ò¥H¥¦´N´£¨Ñ¤F¤@­Ó«Ü¦³¥Îªº¯S©Ê¡Ð¿W¥ß¤_¶}µoÀô¹Ò¡A¨Ï¥Î¦UºØ»y¨¥ªº¶}µo¤u¨ã³£¥i¥H¨Ï¥Î¥¦¡A³o¬O¥¦³Ì¤jªº¯SÂI¡I¦Ó¥B¥Ñ©ó¥¦¬O¤@ºØ½d¥»¡A¨º»ò§Ú­Ì¥i¥H±N³nÅ骺¦U­Ó³¡¤À¤À¬°¦h­Ó½d¥»¡A¦b¥H«áºÞ²z©M¤É¯Åªº®É­Ô¥u­n§ó§ï¨ä¤¤ªº½d¥»¦ÓµL»Ý§ó§ï¨ä¥L¼Ò²Õ¤¤ªº¥ô¦ó¥N½X¡A³o¬O¥¦³Ì¤jªº½æÂI¡I


2.¤G¶i¦ì¼h­±ªº¦@¥Î¬O¤°»ò¡G


³oùØ·|¦h¦¸¨Ï¥Î³o­Ó·§©À¡A¨º»ò¨ì©³¤°»ò¬O¤G¶i¦ì¼h­±©O¡H§Ú­Ì²{¦b¨Ï¥Îªº¦UºØ¶}µo¤u¨ã³£¥N¥Î¦Û¨­ªº®wÀÉ¡A¦pwindows.h©ÎªÌwindows.dcu¡A·íµ{¦¡¦b½sͮɷ|±N³o¨Ç®w¤¤ªº±`¦¡¥[¤J¨ìµ{¦¡¬ÛÀ³ªº³¡¤À¡A¥Ñ©ó¥L­Ì¬O¥Î¦UºØ»y¨¥¼gªº¡A©Ò¥H¦pªG©O­n§ïÅܨ䤤ªº¦æ¬°¥²¶·­«·s½sͧAªº®Ú·½µ{¦¡¥N½X¡C³o¥s°µ»y¨¥¼h­±ªº¦@¥Î¡]²{¦b¶}µo¤u¨ãµ´¤j¦h¼Æªº®w³£¬O³oºØ¡^¡I¦ÓCOM­º¥ý¬O¤@ºØ³W½d¡G¥¦¬O¥Î·L³n³W©wªº¡]¦ý²{¦b¤w¸g¹ê²{¸ó¥­»O¤F¡A²¦³º¦nªº²z©À½Ö³£¥i¥H¥Î¹À¡^¤@ºØ¤G¶i¦ìªº³W½d¡A¤]´N¬OCOM¥²¶·´£¨Ñ¤@¶ô°O¾ÐÅéµ¹½Õ¥ÎªÌ¡A³o¶ô°O¾ÐÅ餤©ñ¸m¦U­ÓCOM¤èªkªº¦ì§}¡A³o¶ô°O¾ÐÅé´N¬O§Ú­Ì»¡ªº¤¶­±¤F¡C¥Ñ©ó²{¦b¤j¦h¼Æªº¶}µo¤u¨ã³£¨Ï¥Î¦UºØ¤è¦¡¡]¤è¦¡¦U¦³¤£¦P¡^´£¨Ñ¤F³o¼Ë¤@¶ô°O¾ÐÅé¡A¨º»ò©Ò¦³ªº¶}µo»y¨¥´N¥i¥H¤¬¬Û¨Ï¥Î¹ï¤è¤¸¥ó´£¨Ñªº¤èªk¤F¡A¦]¬°ÁöµM»y¨¥¤£¦P¡A¦ý¥L­Ì´£¨Ñªº°O¾ÐÅé¶ôªº³W½d¬O¤@¼Ëªº¡A¶i¤J¦U­Ó¤èªk«á´N¥i¥H¹B¦æ¤F¡]¦UºØ»y¨¥´£¨Ñªº¨ç¼Æ½s;¹³£½sͦ¨¤G¶i¦ì¤F¡^¡A¦Ó¥BCOM³W½d¤¤¹ï¨Ï¥Îªº°Ñ¼Æ©Mªð¦^Ãþ«¬³£°µ¤F©w¸q¡A¦UºØ»y¨¥¥u­n«ö·Ó³o­Ó³W©w´N¥i¥H¤F¡A©Ò¥H»¡COM¬O¤@ºØ³W½d§ó¦X¾A¤@¨Ç¡AÁöµM¥¦¤]¬O¤@ºØ°ª¯Å§Þ³N¡I


3.³o½g¤å³¹±NÁ¿¤°»ò¡G


¥Ñ©óCOM¦h¬°¶iµ{¤º¦øªA¾¹¡A©Ò¥H§Ú­Ì³oùØ¥u¬OÁ¿¥HDLL§Î¦¡¦s¦bªºCOMªº¨Ï¥Î©M­ì²z¡A¹ï©ó¶iµ{¥~ªº¦øªA¾¹¡A§A¥i¥H°Ñ¦Ò¬ÛÀ³ªºDCOM±Ð§÷¡C³oùضȶȴNDelphi¤¤¦p¦ó¹ê²{¬ÛÀ³ªº§Þ³N´£¨ÑÁ¿¸Ñ¡A¹ï©ó¨ä¥L»y¨¥ªº¤j®a°Ñ¦Ò¬ÛÀ³¸ê®Æ¡I


4.§@ªÌ©¾§i¡G


COM¬O¥¼¨Ó§@·~¨t²ÎÁ¿¼sªx±Ä¥Îªº¦UºØ§Þ³Nªº°ò¦¡A©Ò¥H¤j®a¥²¶·­n­«µø³o¶ôªº¶}µo©M²z¸Ñ¡A¦pªG§A¹ï©óCOM¤@µL©Òª¾ªº¸Ü¡A«ØÄ³§A¬Ý¬ÝC++¤¤Ãö©ó¥¦ªº¤¶²Ð¡A¦]¬°§Ú§Úı±o¦pªG³sCOMªº³W½d³£¤£À´ªº¸Ü¡A´N«ÜÃø²`¤J¤F¡A§ó§O»¡²z¸ÑDelphi¤¤ªºCOM¤F¡A¦]¬°¦bDelphi¤¤¨Ï¥ÎCOMÁöµM²³æ¡A¦ý­n²z¸Ñ¥¦¬O¦p¦ó¥]¸Ëªº¨S¦³°ò¦¬O¤£¥i¯àªº¡I


³o½g¤å³¹Á¿¤À´X­Ó³¡¤À¤À§OÁ¿¸Ñ¡A¦pªG¤j®a¦³¿³½ì¥i¥HÃöª`³o­Ó½×¾Â¡A¦pªG¦³¤°»ò¤£©ú¥Õªº¦a¤è¤]¥i¥H§i¶D§Ú¡A¯d¨¥©ÎªÌµ¹§Úmail:tufeiping@vip.sina.com¡A§Ú­Ì¤¬¬Û°Q½×¤@¤U^_^


³o¤@¸`¥u¬O¤j®a¼ö¼ö¨­¡A¤j®a¹ï©óŪªÌ­n¨D°µ¨ì¤F¶Ü¡H·Ç³Æ¶}©l«£¡I





〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨­û¡A²{¬°ºaÅA·|­û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
­·°ó§Þ³N¤u§@«Ç
³»³¡
chan0006
ºaÅA²z¨Æ
Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7
¹q¸£¦a±a°Ï¥D

ºaÅA¾±³¹ ¥Ø«e¨S¦³¾±³¹

UID¡G 460360

©Ê§O¡G ¨k

ºëµØ¡G 3 ½g

¿n¤À¡G 2593 ÂI

©«¤l¡G 1863 ½g

  ¤j ¤¤ ¤p
µoªí©ó 2007-4-11 16:29  ¸ê®Æ  ­Ó¤HªÅ¶¡  ¥D­¶ µu®ø®§  ¥[¬°¦n¤Í  ²K¥[ chan0006 ¬°MSN¦n¤Í ³q¹LMSN©M chan0006 ¥æ½Í QQ
com¦bdelphi¤¤¬O¹ê²{¡G
com¦bdelphi¤¤¹ê²{°_¨Ó¬O¬Û·í²³æªº¡A¥u­n§A¨Ï¥Î¬ÛÀ³ªº¶}µoÂQ¾É¡A´N¥i¥H«Ü§Ö¹ê²{¤@­Ócom¦øªA¾¹¤F¡A§Ú­Ì¥ý¨Ó°µ­Ó²³æªºcom¦øªA¾¹¡A¥¦ªº§@¥Î´N¬O¦b®à­±Åã¥Ü¤@­Ó®É¶¡©Mª©Åvªº¸ê°T¡I

¦¹¥DÃD¬ÛÃö¹Ï¤ù¦p¤U¡G

§Ú­Ì±Ä¥Îdelphi6.0¡]§A¤]¥i¥H¨Ï¥Î7.0¡A¥N½X¤@¼Ë¡^
¿ï¾Üfile->open->other¥´¶}ÂQ¾É­±ªO¡A¿ï¾Ünew items->activex->activex library
½T©w´N¥i¥H¥Í¦¨¤@­ÓªÅªº®wÀÉ¡]¤@­Ódllªº®Ø¬[¡^¡A¥¦¥u¬O´£¨Ñ¤Fdllgetclassobject, dllcanunloadnow,dllregisterserver,dllunregisterserver³o¥|­Ó¾É¥X¨ç¼Æ¡A¨ä¥Lªº¤°»ò¤]¤£°µ¡]¦ý´N¬O³o¥|­Ó¨ç¼Æ´£¨Ñ¤Fcom¹B¦æªº¾÷·|¡A«á­±·|Á¿¡^¡CµM«á§Ú­Ì­n¥[¤@­Ócom³æ¤¸¶i¨Ó¡A¦]¬°¥¿¬O­n¥¦¨Ó´£¨Ñµ¹§Ú­Ì¬Y­ÓªA°È¡]¦p¡G³oùتº®à­±®É¶¡Åã¥Ü¡^¡A¦P¼Ë¾Þ§@¿ï¾Üfile->open->other¥´¶}ÂQ¾É­±ªO¡AµM«á¿ï¾Ünew items->activex->com object³o®É·|¸õ¥X¤@­Ó¹ï¸Ü¤è¶ô¡A§A¥u­n¿é¤J§AªºÃþ¦W¡A§Ú­Ì³oùبϥΪº¬Otmyclass¡A¨ä¥Lªº¥i¥H¤£°Ê¡A¥Í¦¨¤@­Ócom³æ¤¸¤F¡C¨Ã¥B­n¨D§A¥Îtype library¨Ó³]¸m§Aªº¤¶­±¡A§A¥i¥H³]¸m§A­nªº¤èªk¡A§Ú­Ì³oùØ¥u´£¨Ñ¨â­Ó¤èªk¡Ggetvalue,setvalue¡C¦n¤F¡A¦^¨ì¶}µo¤¶­±¡A§Ú­Ì²{¦b¤w¸g¦³¤F¤@­Ó¥i¥H¦Û¤v¼g¥N½XªºÃþ¤F¡]¨ä¤¤¤èªk¤]ªÅ¦n¤Fµ¥§Ú­Ì¼g¤F¡A¶}µo¤u¨ã·Q±o¯u¹ê©P¨ì°Ú¡I¡^¡A²{¦b§Ú­Ì¥i¥H¼g¤W¥N½X¤F¡A«ç»ò¼g©O¡H·Q·Q¡I§Ú­Ì´£¨Ñªº¬O¤@­Ó¦b®à­±¤Wªº®ÉÄÁ¡A¥¦­n¤£Â_ªºÅܤƮɶ¡¡A¦Ó¥B­n¦b³Ì¤W¼h¡A¤£ºÞ§A«ç»ò¶}µøµ¡¡A¥¦³£¥i¥HÅý§Ú­Ì¬Ý¨ì¡A¬Ý¨Ó­n¨D±o¤£°ª¡I®É¶¡ªºÅܤƧڭ̥i¥H³q¹L¤@­Ótimer¤¸¥ó¨Ó¹ê²{¡A³Ì¤W¼h¹À¡A¨Ï¥Î®à­±ªºtcanvasª«¥ó¤£´N¥i¥H«£¡C§Ú·Q³oùئh»¡¨â¥y¡G§Ú­Ìªºtimer¤¸¥ó»Ý­n¦b³o­ÓÃþªì©l¤Æ®É­Ô«Ø¥ß¡A«ö¤@¯ëªº·Qªk¡A§Ú­Ì¥i¥H­«¼gºc³y¾¹¨ç¼Æcreate¡A¦ý¦pªG³o¼Ëªº¸Ü´Ngame over¤F¡A¦]¬°¦bdelphi¤¤comªºªì©l¤Æ¬O¥Ñinitialize¨ç¼Æ´£¨Ñ¡A´N¬O§A¦bcreate¨ç¼Æ¤¤¼g¤W¤]¨S¦³¥Î¡A¦]¬°delphi¤£·|½Õ¥Îªº¡I¦n¤F²{¦b¥i¥H¼g¥N½X¤F¡G


ªì©l¤Æ³¡¤À¡G




procedure tmyclass.initialize;
begin
inherited initialize;
canvas:=tcanvas.create;
canvas.handle:=getdc(0);//±o¨ì®à­±ªºdc¡F
time:=ttimer.create(nil);
time.interval:=1000;
time.enabled:=false;
time.ontimer:=ontime;//½á¤©timeª«¥ó¤@­Ó¨Æ¥ó±±¨î½X¡F
end;


¬Û¹ïÀ³´NÀ³¸Ó¦³¾P·´ªº³¡¤À¨Ó¾P·´timer²£¥Íªºª«¥ó¡G




destructor tmyclass.destroy;
begin
canvas.free;
time.free;
inherited destroy;
end;


¨Æ¥ó±±¨î½X¡G




procedure tmyclass.ontime(sender:tobject);
begin
getvalue;//¤º³¡½Õ¥Î¨ä¤¤ªº¤@­Ó¤èªk
end;


¤@­Ó½Õ¥Î¨ç¼Æ¡G




procedure tmyclass.setvalue(value:integer);
begin
time.enabled:=true;//±Ò°Ê®É¶¡²Õ¥ó
end;


¤èªkªº¥N½X¡G




function tmyclass.getvalue:integer;
var
t:tdatetime;
s:string;
begin
try
t:=now();
s:=formatdatetime('yyyy"¦~"mm"¤ë"dd"¤é"ampmhh"®É"',t);
canvas.font.color:=clred;
canvas.font.size:=18;
canvas.brush.style:=bsclear;
canvas.textout(500,520,s);
canvas.font.color:=clblue;
canvas.font.size:=18;
canvas.brush.style:=bsclear;
canvas.textout(500,540,'¶î«D¥­»s§@');
except
raise exception.create('canvas is error');
end;
result:=0;//§Ú­Ì³oùبS¥Î¥¦¡Aªð¦^¤@­Ó0´N¥i¥H¤F¡I^_^
end;


¦n¤F¡A°ò¥»¥N½X¼g§¹¤F¡A¥i¥H½sͤF¡A½sĶ«á¥Í¦¨ªºdllÁÙ¤£¥i¥H½Õ¥Î¡A­n¥ýµù¥U¨ì¨t²Î¤¤¡]¦Vµù¥Uªí¼g¤J¬ÛÀ³ªº¸ê°T¡^¡A§Ú­Ì«ö¤U¥\¯àªírun->register activex server¼u¥X¹ï¸Ü¤è¶ôªí¥Ü§Ú­Ì¥¿½Tµù¥U¡A²{¦b§Ú­Ì´N¦³¤@­Ócom¦øªA¾¹¤F¡I¡I¡I¡I¡I¡I¡I¡I¦ý§Ú­Ì«ç¼Ë½Õ¥Î¥¦©O¡H¥´¶}­è­è¶}µoªº¤uµ{³æ¤¸¡A§ä¨ì¬ÛÀ³ªºtlb.pas³æ¤¸¡A°O¤U¤@­Ó­È¡Gclsid_myclass´N¥i¥H¤F¡A§Ú­Ì­n¾a¥¦¨Ó½Õ¥Î©O


¤@¨Ç³o­Ó³æ¤¸¤¤ªº¸ê°T¡]¦Ü©óguid¤£­n§Ú»¡¤F§a¡^



¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð
imyinterface=interface(iunknown)
['{a0c53f6f-f270-457b-8d42-89fb12737d6b}']
function getvalue:integer;stdcall;
procedure setvalue(value:integer);stdcall;
end;
const clsid_tmyclass:tguid='{c421dfce-1cfa-476e-b69b-d7f519ff87d7}';
¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð¡Ð

¤U­±§Ú­Ì¨Ó¼g½Õ¥Î³¡¤À¡G

«Ø¥ß¤@­Ó³æµøµ¡µ{¦¡¡A¦b¤W­±¥[¤@­Ó«ö¶s´N¥i¥H¤F¡A²{¦b´N¼g«ö¶sªº¨Æ¥ó±±¨î½Xªº¥N½X¡A¨ä¥Lªº¥i¥H¤£¼g¡]¥»¨Ó´N¨S¦³¥N½X¡A^_^¡^¡C

¤£¹L­n¥ý¥[¤J§A­è¤~½s¼gªºcomªº¬ÛÀ³¸ê°T¶i¨Ó¤~¥i¥H¡A§ä¨ì¬ÛÀ³ªºtlb.pas³æ¤¸¡AÁ¿¤¶­±³¡¤À½Æ»s¹L¨Ó¡]´£¨Ñ¤@­Ó½Õ¥Î¤¶­±ªº³W½d¡A§i¶Dµ{¦¡«ç¼Ë½Õ¥Î¡^¡A´N¬O¤W­±µe½uªº³¡¤À½Æ»s¹L¨Ó¡I
²{¦b¥i¥H¼g«ö¶s¨Æ¥ó¥N½X¤F¡G



procedure tform1.button1click(sender: tobject);
begin
map:=createcomobject(clsid_tmyclass) as imyinterface;
map.setvalue(1);//¦Ü©ó³oùتº°Ñ¼Æ¡A¥Ñ©ó§Ú­Ì¨S¦³¥Î¥¦¡A©Ò¥H§A¥i¥H¿é¤J¥ô¦ó¼Æ¡A¦ý¤£¯à¤j©ó¾ã¼Æªº½d³ò³é¡I
end;


ª`·N³oùتºmap¬O¦bÃþ¤¤Án©úªº¤@­Ó¤¶­±ÅܼơA§A¥i¥H»{¬°¥¦¬O¤@­Óª«¥ó¡G map:imyinterface;

¦n¤F¡A¸Õ¸Õ§a¡I«ö¤@¤U«ö¶s¬O¤£¬O¥X²{¹Ï¤ù¤Wªº±¡´º¤F¡H

¦n¤F¡A³o¤@¸`¥D­n¬O´_²ß¤@¤U»s§@comªº¨BÆJ¡AÁöµM²³æ¡A¦ý½ÆÂøªºcom¤]¬O³o¼Ë°µ¥X¨Óªº¡A³oùØÁÙºt¥Ü¤F¦p¦ó¦bÃþ¤¤¥]¸Ëª«¥ó¡AÅýª«¥ó¬°§Ú­Ì°µ¨Æ¡C¥H«á´X¸`§Ú·|¥H³o­Ó¨Ò¤l¨ÓÁ¿¸Ñ¨t²Î¬O«ç¼ËÅý¥¦±Ò°Ê¤u§@ªº¡A¥H¤Î¥¦¬O«ç»ò¿é¥X¥¦¦Û¤vªº¤èªkªº¡I
¦n¤F¡A¤U¸`¨£¡I





〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨­û¡A²{¬°ºaÅA·|­û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
­·°ó§Þ³N¤u§@«Ç
³»³¡
chan0006
ºaÅA²z¨Æ
Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7
¹q¸£¦a±a°Ï¥D

ºaÅA¾±³¹ ¥Ø«e¨S¦³¾±³¹

UID¡G 460360

©Ê§O¡G ¨k

ºëµØ¡G 3 ½g

¿n¤À¡G 2593 ÂI

©«¤l¡G 1863 ½g

  ¤j ¤¤ ¤p
µoªí©ó 2007-4-11 16:30  ¸ê®Æ  ­Ó¤HªÅ¶¡  ¥D­¶ µu®ø®§  ¥[¬°¦n¤Í  ²K¥[ chan0006 ¬°MSN¦n¤Í ³q¹LMSN©M chan0006 ¥æ½Í QQ
²³æªº§Q¥Î¶}µoÂQ¾É¡A¼g´X¦æÂ²³æªº¥N½X´N§¹¦¨¤@­ÓÅã¥Ü®É¶¡ªºcom¦øªA¾¹¡A¬O¤£¬O«Ü²³æ¡A¦pªG§A¯uªº³o»ò»{¬°¨º§A´N¿ù¤F¡C¹ï¡IÁöµM§A·|¥Îdelphi¶}µocom¤F¡A¦ý¦pªG§A·Q²z¸Ñ¥¦©ÎªÌ¥H«á¶}µo½ÆÂøªºcom©M²`¤Jdcom¾÷¨î¤£²z¸Ñ¥¦ªº¹B¦æ¾÷¨î¬O¤£¥i¯àªº¡I²{¦b§Ú­Ì¥ý´N½Õ¥ÎºÝ¨Ó¤ÀªR¤@¤U¥¦¬O«ç»ò¤u§@ªº¡I

§Ú­Ì½Õ¥Î¬O¥Î³o¼Ëªº§Î¦¡¡G

map:=createcomobject(clsid_tmyclass) as imyinterface;
¨ä¹ê³oùا¹¦¨ªº¬O¨â­Ó¾Þ§@¡G
§¹¾ãªºÀ³¸Ó¬O³o¼Ëªº¡G


map1:=createcomobject(clsid_tmyclass);//map1¬O¤@­ÓiunknownÃþ«¬ªº¤¶­±
map1.queryinteface(iid_shelllinka,map);//³q¹Lmap1¬d§äiid_shelllinka¤¶­±

¶È¾a¨t²Î´£¨Ñ¤@­Ócreatecomobject§Ú­Ì´N¥i¥H¨Ï¥Î¤@­Ócom¦øªA¾¹¤F¡A³o­Ó¨ç¼ÆªÖ©w°µ¤F¤°»ò¡H
¦bdelphiªº·½¥N½X¤¤createcomobject¬O³o¼Ë©w¸qªº¡G




function createcomobject(const classid: tguid): iunknown;
begin
olecheck(cocreateinstance(classid, nil, clsctx_inproc_server or
clsctx_local_server, iunknown, result));
end;


¨þ¨þ¡A­ì¨Ó¬O¨ç¼Æªº¥]¸Ë°Ú¡I
³oùØ´N­n¤¶²Ð¤@¤Ucocreateinstance¨ç¼Æ¡C


function cocreateinstance; external ole32 name 'cocreateinstance';


¥¦¬O¨t²Î¡]ole32.dll¡^´£¨Ñªº¤@­Óapi¡A¨º»ò¥¦¬O°µ¤°»òªº©O¡A¨ãÅé°µ¤F¤°»ò¤u§@¡H


³o­Ó¨ç¼Æ¯u¥¿­n§Ú­Ì´£¨Ñªº°Ñ¼Æ´N¬O¤@­Óclassid¡A¨ä¥Lªº¥i¥H¨Ï¥Î¤W­±ªº¹w³]­È¡C


¥¦·|±qµù¥Uªí¤¤§ä¸ÓcomÃþªºclassid¡]¦bhkey_classes_root\clsidÁ䤤¡^¡A§ä¨ì¬ÛÀ³ªºÁä«á¨t²Î·|Ū¨ú¨ä¤¤inprocserver32ªº¸ê®Æ¡A§ä¨ì¦øªA¾¹ªº¦ì§}«á¥Îloadlibrary¨ç¼Æ±N¦øªA¾¹dll¸ü¤J±J¥D¶iµ{¡A¦A§Q¥Îdll¤¤ªºdllgetclassobject¨ç¼Æ¡]³o¬O¨C¤@­Ódll§Î¦¡com¦øªA¾¹¥²¶·´£¨Ñªº¨ç¼Æ¡^¡AÀò¨ú¤Ficlassfactory¤¶­±«ü¼Ð«á§Q¥Î³o­Ó¤¶­±¤¤createinstance¤èªk³Ð«Ø§Ú­Ì»Ý­nªºcomª«¥óªº¹ê¨Ò¡]³o­Ó®É­Ôª«¥ó¤~¥X²{¤F¡^¡I¦n¤F¡A²{¦bª¾¹D¥L­Ì¤§¶¡ªº½Õ¥Î¹Lµ{¶Ü¡C¤p¸`¤@¤U¡G




createcomobject-->cocreateinstance-->µù¥Uªíclsid-->loadlibrary
-->dllgetclassobject¡]§Ú­Ì¦b«á­±¤ÀªR¤¤±N±q³oùض}©l¡^
-->iclassfactory.createinstance


¦n¤F¡A«e­±ªº¤ÀªR§¹¦¨¤F¡A¥Ñ©ó¥¦¤j³¡¤À¥\¯à³£¬O¥Ñ¨t²Î§¹¦¨ªº¡A¨S¦³¦h¤Ö¬ã¨sªº¥²­n¡A§A¥u­n·|¥Î¡Aª¾¹D«ç»ò¥Î©M¥¦¬O°µ¤°»òªº´N¥i¥H¤F¡C¡]¤]¨S¦³±ø¥ó¤ÀªR¤U¥h¡A§Ú¥i¨S¦³³o­Óapiªº·½½X¡A§A¥u¦³¥h°Ý·L³n¤F¡A¤£ª¾¹D¥¦·|¤£·|µ¹§A¡^¡A¨º»ò¤U­±§Ú­Ì±qdllgetclassobject¨ç¼Æ¶}©l¤ÀªR¡A¥¦¬O½sµ{»y¨¥´£¨Ñªº¡]¨t²Î­n¨Dªº¡A¤u¨ã´£¨Ñªº¡^¡A§Ú­Ì¥i¥H¤ÀªR¨ä¤¤ªº¥N½X¡A¥ý¬Ý¬Ýdll¤uµ{ªº¥N½X¡G




library project3;

uses
comserv,
unit3 in 'unit3.pas',
project3_tlb in 'project3_tlb.pas',
unit7 in 'unit7.pas' {form1};

exports
dllgetclassobject,
dllcanunloadnow,
dllregisterserver,
dllunregisterserver;

{¢Cr *.tlb}

{¢Cr *.res}

begin
end.


¶È¶È¬O¾É¥Xcomserv®w¤¤ªº¥|­Ó¨ç¼Æ¡A¨ä¤¤dllgetclassobject§Ú­Ì¤W­±»¡¹L¡A¤]¬O³Ì­«­nªº¡A¥ý¤ÀªR¥¦¡G




function dllgetclassobject(const clsid, iid: tguid; var obj): hresult;
var
factory: tcomobjectfactory;//ª`·N¡G³oùس£¬O¥ÑÃþ¤u¼t´£¨Ñªº¡C
begin
factory := comclassmanager.getfactoryfromclassid(clsid);//1
if factory <> nil then
if factory.getinterface(iid, obj) then//2
{¥ÑÃþ¤u¼t¥h¬d§ä¬ÛÀ³ªºiid¡A¦¨¥\´Nªð¦^s_ok¡A¨Ã¥B±N¤¶­±«ü¼Ðªð¦^µ¹obj}
result := s_ok
else
result := e_nointerface{¨S¦³§ä¨ì´Nªð¦^e_nointerface}
else
begin//¦pªG¨S¦³¬ÛÀ³Ãþ¤u¼t
pointer(obj) := nil;//±N¤¶­±«ü¼Ð¸mnil
result := class_e_classnotavailable;
end;
end;


²{¦bÁ¿Á¿³o­Ó¨ç¼Æ¡A³o­Ó¨ç¼Æ³q¹Lclsid, iid°Ñ¼Æ¨Ó§ä¥L­Ì¦bdll¤¤ªº¤¶­±ªº¦ì¸m¡AµM«á³q¹L°Ñ¼Æobj¨Óªð¦^«ü¼Ð¡A¦Ó¾ã­Ó¨ç¼Æªºªð¦^­È¡]hresultÃþ«¬¡^¥u¬O¥Î¨Ó§i¶D¨t²Î¤¶­±¬O§_¦s¦b¡C³oùتºobj¬O¤°»ò©O¡H´N¬O§Ú­Ì«e­±©w¸qªºmap°Ú¡I¬O¤£¬O¹ï©ó³oºØªð¦^§Î¦¡ÁÙ¤£¾AÀ³¡A¤£­nºò¡A¬Ý¦h¤F´Nª¾¹D¤F¡A³oºØªð¦^§Î¦¡«Ü¦³®Äªº¡I¤£¹L­nª`·N¨ì¥¦¬OvarÁn©ú§Î¦¡ªº³é¡I¡I³o­Ó¨ç¼Æ­n©¹¤U¤ÀªRªº³¡¤À¡]©ÎªÌ­n­«ÂIª`·Nªº³¡¤À¡^¤w¸g¥Î¼Æ¦ì¼Ð©ú¤F¡I¨º»ò§Ú­Ì¤U¤@¸`´N¥ý¤ÀªR1§a¡C

¦n¤F¡A¥ýÁ¿¨ì³oùØ¡A¤U¸`¨£¡C





〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨­û¡A²{¬°ºaÅA·|­û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
­·°ó§Þ³N¤u§@«Ç
³»³¡
chan0006
ºaÅA²z¨Æ
Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7
¹q¸£¦a±a°Ï¥D

ºaÅA¾±³¹ ¥Ø«e¨S¦³¾±³¹

UID¡G 460360

©Ê§O¡G ¨k

ºëµØ¡G 3 ½g

¿n¤À¡G 2593 ÂI

©«¤l¡G 1863 ½g

  ¤j ¤¤ ¤p
µoªí©ó 2007-4-11 16:32  ¸ê®Æ  ­Ó¤HªÅ¶¡  ¥D­¶ µu®ø®§  ¥[¬°¦n¤Í  ²K¥[ chan0006 ¬°MSN¦n¤Í ³q¹LMSN©M chan0006 ¥æ½Í QQ
³q¹L¤W­±´X¸`ªº¤ÀªR¡A¤£ª¾¹D§A¹ï©ó³oºØ¾Ç²ß¤èªk¬O§_º¡·N¡A¦pªG§Aº¡·N¨º§Ú·|«D±`°ª¿³ªº¡C§Ú§Æ±æ§ó¦hªºªB¤Í¤À¨É§Ú¾Ç²ß¤Wªº¤ß±o¡A°µ¥X§ó¦nªº³nÅé¡A§ä¨ì§ó¦nªº¤u§@¡AÁȨì§ó¦hªº¿ú¡I¦n¤F¶¢¸Ü¤Ö±Ô¡A±µµÛÁ¿¡C
¤W­±§Ú­ÌÁ¿ªº²Ä¤@­Ó­nÂI¬O³o¦æ¥N½X¡G
factory := comclassmanager.getfactoryfromclassid(clsid);//1
comclassmanager¬O¤@ºØª«¥ó¡A¥¦«Ü²³æ¡A¥D­n¬O¥Î¨ÓºÞ²zÃþ¤u¼tªº¡A¥¦­«­nªº¤èªk´N¬O³oùتºgetfactoryfromclassid¡A®Ú¾Úclsid¨Ó¬d§äÃþ¤u¼t¨Ãªð¦^¤§¡C¦³¿³½ìªºªB¤Í¥i¥H¬Ý³o­ÓÃþªº·½¥N½X¡]«Ü²³æªº¡A¦ô­p¬Oobject pascal³Ì²³æªº´X­ÓÃþ¤§¤@¤F¡^¡A³oùاڭ̥u­nª`·Ngetfactoryfromclassid¨ç¼Æ´N¥i¥H¤F¡C


function tcomclassmanager.getfactoryfromclassid(const classid: tguid): tcomobjectfactory;
begin
flock.beginread;//Âê©w¨Ã¶}©lŪ¨ú¨ä¤¤¸ê®Æ
try
result := ffactorylist;{±o¨ìcomclassmanagerª«¥óªºffactorylist(¨ä¤¤©ñ¸mªº´N¬OÃþ¤u¼t¡A¥¦¨Ï¥Îaddobjectfactory¨Ó²K¥[¬ÛÀ³ªºÃþ¤u¼t)}
while result <> nil do
begin
if isequalguid(result.classid, classid) then exit;{§ä¨ì¤F´N°h¥X¡A¨Ãªð¦^³o­Óresult­È}
result := result.fnext;//Ãþ¤u¼t¦s©ñ¦bfnextÅܼƤ¤
end;
finally
flock.endread;//¸ÑÂê«ì´_
end;
end;

isequalguid¬O¤@­Ó¤ñ¸û¨ç¼Æ¡A¥¦¤ñ¸ûclassid¡Aclassid¬Û¦Pªð¦^true§_«hªð¦^false¡F
±q³oùØ¥i¥Hª¾¹D³o­Ó¨ç¼Æ¥D­n¬Oªð¦^¤@­ÓÃþ¤u¼tªº«ü¼Ð¡C¨º»ò¨ì©³¤°»ò¬OÃþ¤u¼t¡A¬°¤°»ò­n¨Ï¥ÎÃþ¤u¼t©O¡H
com¤¤¦³¤@­Ó­«­nªº«ä·Q´N¬O«Ê¸Ë¡C¥¦±N¦Û¤vªº¹ê²{«Ê¸Ë°_¨Ó¡A¶È¶È¥u¬O¯d¤U¤@­Ó¤¶­±Åý¥Î¤á¨Ó½Õ¥Î¡I¦Ü©óùØ­±¬O«ç¼Ë¹ê²{ªº¥~­±¤@·§¤£ª¾¡A¦ÓÃþ¤u¼tªº¦s¦b±N³oºØ«Ê¸Ë±À¦V¤F¤Î¦Ü¡A¦]¬°¥¦¥»¨­¤]¬O¤@­Ócomª«¥ó¡A§Ú­Ì¥s¥¦¡§¤@¯Åª«¥ó¡¨¡AµM«á¦A¥Ñ¥¦¨Ó¥Í¦¨§Ú­Ìªºcomª«¥ó¡A¨º§Ú­Ìªºcomª«¥ó´N¥i¥H¥s°µ¡§¤G¯Åª«¥ó¡¨¡A³q¹L¨â¯Å«Ê¸Ë¡A§O¤HÁÙª¾¹D§A¬O«ç»ò¹ê²{ªº¡H¦bdelphi¤¤Àq»{ªºcomª«¥ó³£¬O³q¹LÃþ¤u¼t¥Í¦¨ªº¤G¯Åª«¥ó¡]·íµM§A¤]¥i¥H¥Î¤@¯Å¨Ó·d©w¡A³Ì«á¤@¸`§Ú­Ì±N¹ê²{³o»ò¤@­Ócom¡A¦]¬°³o­n¨D¤@©wªº°ò¦¡^¡C¨º»òÃþ¤u¼t¨ì©³¬O­Ó¤°»òªF¦è¡A¥¦¦³¤°»ò¯S§O¤§³B©O¡H
Ãþ¤u¼t¨ä¹ê´N¬O¤@­Ó²³æªºcomÃþ¡A¤£§Æ©_¡A¦ýªº½T¦³¯S§O¤§³B¡A¦]¬°¥¦´£¨Ñ¤F¤@­Ó«Ü¦³¥Îªº¤¶­±©M¤èªk¡G


iclassfactory = interface(iunknown)
['{00000001-0000-0000-c000-000000000046}']
function createinstance(const unkouter: iunknown; const iid: tiid;
out obj): hresult; stdcall;
function lockserver(flock: bool): hresult; stdcall;
end;

²{¦b©ú¥Õ¤F§a¡A¥u­n¹ê²{¤Ficlassfactory¤¶­±ªºcomÃþ§Ú­Ì´N¥i¥H¥s¥¦Ãþ¤u¼t¡A¨S¦³¤°»ò¨ä¥Lªº¯SÂI¡I¦Ü©ócreateinstance¨ç¼Æ«á­±±N¤¶²Ð¡A¥ý±N¤W­±¤@¸`ªº²Ä¤G­Ó­«ÂI¸ÑÄÀ¤@¤U¡G
factory.getinterface(iid, obj)
¦pªG§ä¨ì¤@­ÓÃþ¤u¼tªº¸Ü´N½Õ¥Î³o­Ó¤èªk¨Ó§ä°Ñ¼Æid¼ÐÃѪº¤¶­±¨Ã¨Ì¾aobj¨Óªð¦^«ü¼Ðµ¹dllgetclassobjectªºobj°Ñ¼Æ¡I¨º»ò¥¦¬O«ç»ò¬d§äªº¡AÀH§Ú¨Ó¡I
function tobject.getinterface(const iid: tguid; out obj): boolean;
var
interfaceentry: pinterfaceentry;//¤¶­±«ü¼Ðªº¤J¤f
begin
pointer(obj) := nil;//¥ý±Nobj¸m¬°nil
interfaceentry := getinterfaceentry(iid);{®Ú¾Úiid¬d§ä¥X¤¶­±ªº¤J¤f¡A³o¤S¬O¤@­Ó­«­nªº¨ç¼Æ³é¡A^_^}
if interfaceentry <> nil then//¦pªGªð¦^¤F¤¶­±¤J¤f
begin
if interfaceentry^.ioffset <> 0 then//½T©w¨ä¤¤ªº°¾²¾¶q
begin
pointer(obj) := pointer(integer(self) + interfaceentry^.ioffset);{¨þ¨þ¡A§ä¨ì³o­Ó¤J¤f¤F¡A¥¦´N¬O§Ú­Ì­nªð¦^ªº¤¶­±«ü¼Ð¤F}
if pointer(obj) <> nil then iinterface(obj)._addref;{¦pªG½Õ¥Î¦¨¥\¡A¥ý½Õ¥Î¤¶­±ªº_addref¤èªk±Ncomª«¥ó¨Ï¥Î¦¸¼Æ¥[1¡A³o¬O¤@­Óiunknown¤¶­±ªº¼Ð·Ç¤èªk}


end
else
iinterface(obj) := invokeimplgetter(self, interfaceentry^.implgetter);{³o­Ó§Ú­Ì¥i¥H¥ý©ñ¤U}
end;
result := pointer(obj) <> nil;//ªð¦^­È¬O¤@­Óboolean­È
end;


±µ¤U¨Ó§Ú­Ì¥ý¬Ý¬Ý´X­Ó¸ê®Æµ²ºcªº©w¸q¡G



tguid = packed record
d1: longword;
d2: word;
d3: word;
d4: array[0..7] of byte;
end;
pinterfaceentry = ^tinterfaceentry;
tinterfaceentry = packed record
iid: tguid;//¤¶­±ªº©w¸qiid
vtable: pointer;{¤¶­±«ü¼Ð«ü¦Vªº°O¾ÐÅéµ²ºc«ü¼Ð¡A¤@­ÓµêÀÀ¤èªkªí¡A³oùØ­n°Ï§Odelphi¤¤ªºvmt³é}
ioffset: integer;//°¾²¾¶q
implgetter: integer;
end;
pinterfacetable = ^tinterfacetable;
tinterfacetable = packed record
entrycount: integer;//¤¶­±­Ó¼Æ
entries: array[0..9999] of tinterfaceentry;{¤¶­±¤J¤f°}¦C¡A­Ó¼Æ¨Ì¾Úentrycount¨Ó©w}
end;

³oùØ´N¤£»¡´X­Óµ²ºc¤F¡A¦pªG§A³s³o­Ó³£¤£²M·¡¨º´N¤£­n¬Ý¤U­±ªº¤º®e¡A¥ý¥R¥R¹q¦A¨Ó
±µµÛ»¡¡A¤W­±¨º­Ó¨ç¼Æ³Ì­«­nªº´N¬Ogetinterfaceentry¨ç¼Æªº¨Ï¥Î¤F¡A¥¿¬O¥Ñ¥¦¨Ó§¹¦¨¬d§ä¤¶­±ªº¤u§@ªº¡I
¥¦¬O¤@­ÓÃþ¤èªk¡A¦Ü©ó¤°»ò¬OÃþ¤èªk©MÃþ¤Þ¥ÎÅܼƧA¥i¥H°Ñ¬Ý½×¾Â¤¤§Ú¥H«eµoªíªº¤@½g¤å³¹¡mdelphi¤¤ªºoop«ä·Q¡Ð1.pascal³¡¤À¡nùØ­±¦³¸Ô²Óªº¤¶²Ð¡I


class function tobject.getinterfaceentry(const iid: tguid): pinterfaceentry;
var
classptr: tclass;//¤@­ÓÃþ¤Þ¥ÎÅܼÆ
intftable: pinterfacetable;//¤¶­±ªíªº«ü¼Ð
i: integer;
begin
classptr := self;//±N¦Û¤vªº«ü¼Ð½áµ¹classptr
while classptr <> nil do
begin
intftable := classptr.getinterfacetable;{½Õ¥Îgetinterfacetable¤èªk¨Óªð¦^µ¹¤¶­±ªí«ü¼ÐÅܼơA«y¡I¤S¬O¤@­Ó¥]¸Ëªº¨ç¼Æ¡A·Ð°Ú}
if intftable <> nil then
for i := 0 to intftable.entrycount-1 do{¹M¾ä©Ò¦³ªº¤¶­±¨Ó¹ï¤ñiid¬d§ä¬ÛÀ³ªºªí¦pªG§ä¨ì´N¸õ¥X°j°é}
begin
result := @intftable.entries[i];
if (int64(result^.iid.d1) = int64(iid.d1)) and
(int64(result^.iid.d4) = int64(iid.d4)) then exit;//§ä¨ì¸õ¥X
end;
classptr := classptr.classparent;
end;
result := nil;{¦pªG­è¤~ªº°j°é¨S¦³¸õ¥X¡A»¡©ú¨S¦³§ä¨ì¡Aªð¦^¬°nil}
end;


¦n¤F¡A³o»ò¦h¨ç¼Æ¡A¨ç¼Æ¥]¨ç¼Æ¡A¬O¤£¬O¦³ÂIÀY·w°Ú¡A¥ý·²·²¡A²z²M«ä¸ô¡A·Ç³Æ¤U¸`±µµÛÁ¿¡A¦n¤F¤U¸`¨£¡C





〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨­û¡A²{¬°ºaÅA·|­û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
­·°ó§Þ³N¤u§@«Ç
³»³¡
chan0006
ºaÅA²z¨Æ
Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7
¹q¸£¦a±a°Ï¥D

ºaÅA¾±³¹ ¥Ø«e¨S¦³¾±³¹

UID¡G 460360

©Ê§O¡G ¨k

ºëµØ¡G 3 ½g

¿n¤À¡G 2593 ÂI

©«¤l¡G 1863 ½g

  ¤j ¤¤ ¤p
µoªí©ó 2007-4-11 16:35