Delphi ÀàÓë¶ÔÏóÄÚ´æ½á¹¹Ç³Îö(ÉÏ)
²Î¿¼×ÊÁÏ
ÀîÕ½.¡¶Îò͸delphi¡·£¬µÚ1Õ“DELPHIµÄÔ×ÓÊÀ½ç”
“̽Ë÷DelphiÀàÓë¶ÔÏóµÄÄÚ´æ½á¹¹”
»ù±¾ÖªÊ¶
¶¯Ì¬ÄÚ´æÓ뾲̬ÄÚ´æ
µ±³ÌÐòÔËÐÐʱ£¬ÏµÍ³Ê×ÏȽ«ËùÓÐÊý¾Ý×°ÔØÈëÄڴ棬Íê³É³õʼ»¯£¬È»ºó´ÓÈë¿ÚµØÖ·¿ªÊ¼Ö´ÐдúÂë¡£
³ÌÐò×°ÔØºó¼´´æÔÚÓÚÄÚ´æ¿Õ¼äÖеÄÊý¾ÝÎÒÃdzÆÖ®Îª¾²Ì¬Äڴ棬ÔËÐйý³ÌÖзÖÅäµÄÄÚ´æÎÒÃdzÆÖ®Îª¶¯Ì¬ÄÚ´æ¡£
DelphiµÄÀàÊÇÓɱàÒëÆÚ¼ä¾ö¶¨µÄ£¬±àÒëÍê³Éºó¼´¹Ì¶¨ÔÚ³ÌÐòÖУ¬ËùÒÔÀàÊÇ´æÔÚÓÚ¾²Ì¬ÄÚ´æÖУ¨ÀàÐÅÏ¢Ó¦¸ÃÊÇλÓÚÊý¾Ý¶Î£¬ÀàµÄ·½·¨ÊµÏÖÓ¦¸ÃÊÇλÓÚ´úÂë¶Î£©¡£¶ÔÏóÊÇÓÉÔËÐÐÆÚ¼ä´´½¨µÄ£¬ËùÒÔ¶ÔÏóÊôÓÚ¶¯Ì¬ÄÚ´æ¡£
¶ÔÏó
DELPHIÖеĶÔÏóÊÇÒ»¸öÖ¸Õ룬Õâ¸öÖ¸ÕëÖ¸Ïò¸Ã¶ÔÏóÔÚÄÚ´æÖÐËùÕ¼¾ÝµÄÒ»¿é¿Õ¼ä¡£ÎÒÃÇ¿ÉÒÔÊÔ×ÅÓÃsizeofº¯Êý»ñÈ¡¶ÔÏóµÄ´óС£¬½á¹ûÊÇ4×Ö½Ú£¬ÕâÕýÊÇÒ»¸ö32λָÕëµÄ´óС¡£¶ø¶ÔÏóµÄÕæÕý´óСӦ¸ÃÓÃMyObject.InstanceSize»ñµÃ¡£
¶ÔÏó¿Õ¼ä
ÎÒÃǽ«¶ÔÏóÖ¸ÕëÖ¸ÏòµÄÄÚ´æ¿Õ¼ä³ÆÎª¶ÔÏó¿Õ¼ä¡£¶ÔÏó¿Õ¼äµÄÍ·4¸ö×Ö½ÚÊÇÖ¸Ïò¸Ã¶ÔÏóÖ±ÊôÀàµÄÐé·½·¨µØÖ·±í£¨VMT – Vritual Method Table£©¡£½ÓÏÂÀ´µÄ¿Õ¼ä¾ÍÊÇ´æ´¢¶ÔÏó±¾Éí³ÉÔ±Êý¾ÝµÄ¿Õ¼ä£¬²¢°´´Ó¸Ã¶ÔÏó×îÔÊ¼×æÏÈÀàµÄÊý¾Ý³ÉÔ±µ½¸Ã¶ÔÏó¾ßÌåÀàµÄÊý¾Ý³ÉÔ±µÄ×Ü˳Ðò£¬ºÍÿһ¼¶ÀàÖж¨ÒåÊý¾Ý³ÉÔ±µÄÅÅÁÐ˳Ðò´æ´¢¡£
µ±Ò»¸ö¶ÔÏó²úÉúʱ£¬ÏµÍ³»áΪ¸Ã¶ÔÏó·ÖÅäÒ»¿éÄÚ´æ¿Õ¼ä£¬È»ºó½«¿Õ¼äµÄÍ·4¸ö×ֽڴ洢ΪָÏòÀàµÄVMTµÄÖ¸Õ룬´Ó¶ø½«¸Ã¶ÔÏóÓë¶ÔÏóµÄÖ±ÊôÀàÁªÏµÆðÀ´¡£¼´Ê¹Àಢ䶨ÒåÈκÎÐé·½·¨£¬¶ÔÏóÈÔÈ»»á±£´æÖ¸ÏòÐé·½·¨µØÖ·±íµÄÖ¸Õ룬ֻÊÇVMTµØÖ·ÏîµÄ³¤¶ÈΪÁã¡£
Àà¿Õ¼ä
ÎÒÃǽ«ÀàÖ¸ÕëÖ¸ÏòµÄÄÚ´æ¿Õ¼ä³ÆÎªÀà¿Õ¼ä¡£ÀàÖ¸ÕëÓëVMTÖ¸ÕëµØÖ·Ïàͬ¡£ÔÚTObjectÖж¨ÒåµÄÐé·½·¨µØÖ·£¨ÈçDestroy¡¢FreeInstanceµÈµÈ£©´æ´¢ÔÚÏà¶ÔVMTÖ¸Õ븺·½ÏòÆ«ÒÆµÄ¿Õ¼äÖС£ÔÚVMTµÄ¸º·½ÏòÆ«ÒÆÓÐ76¸ö×Ö½ÚµÄÊý¾ÝÐÅÏ¢£¬ËüÃÇÊǶÔÏóÀàµÄ»ù±¾Êý¾Ý½á¹¹¡£¶øVMTÊÇ´æ´¢ÎÒÃÇ×Ô¼ºÎªÀඨÒåµÄÐé·½·¨µØÖ·µÄµØ·½£¬ËüÖ»ÊÇÀàÊý¾Ý½áµÄ¹¹À©Õ¹²¿·Ö¡£VMTǰµÄ76¸ö×Ö½ÚµÄÊý¾Ý½á¹¹ÊÇDELPHIÄÚ¶¨µÄ£¬Óë±àÒëÆ÷Ïà¹ØµÄ£¬²¢ÇÒÔÚ½«À´µÄDELPHI°æ±¾ÖÐÓпÉÄܱ»¸Ä±ä¡£
¶ÔÎÒÃǵÄÓ¦ÓóÌÐòÀ´Ëµ£¬ÀàµÄÊý¾ÝÊǾ²Ì¬µÄÊý¾Ý¡£µ±±àÒëÆ÷±àÒëÍê³ÉÎÒÃǵÄÓ¦ÓóÌÐòÖ®ºó£¬ÕâЩÊý¾ÝÐÅÏ¢ÒѾȷ¶¨²¢Òѳõʼ»¯¡£ÎÒÃDZàдµÄ³ÌÐòÓï¾ä¿É·ÃÎÊÀàÊý¾ÝÖеÄÏà¹ØÐÅÏ¢£¬»ñµÃÖîÈç¶ÔÏóµÄ³ß´ç¡¢ÀàÃû»òÔËÐÐʱ¿ÌµÄÊôÐÔ×ÊÁϵȵÈÐÅÏ¢£¬»òÕßµ÷ÓÃÐé·½·¨ÒÔ¼°¶ÁÈ¡·½·¨µÄÃû³ÆÓëµØÖ·µÈµÈ²Ù×÷¡£
VMT
ÿһ¸öÀà¶¼ÓжÔÓ¦µÄÒ»¸öÐé·½·¨µØÖ·±í£¨VMT – Vritual
Ïà¹ØÎĵµ£º
Ò»¡¢Dll½¨Á¢
£¨Ò»£©DLLÏîÄ¿µÄ½¨Á¢
library mydll;
uses
base in 'base.pas';
exports
Triple name 'Tr';
{$R *.res}
begin
end.
£¨¶þ£©º¯Êýµ¥Ôª
unit base;
interface
uses windows;
function Triple(N:integer):integer;stdcall;
  ......
delphiºÜÔç¾ÍÒѾ¿ÉÒÔ½øÐÐÈý²ãµÄ¿ª·¢ÁË. µ«Ò»Ö±µ½ÏÖÔÚ, ÍøÉÏÕâ·½ÃæµÄ¶«Î÷Ì«ÉÙ ÁË. Ҫô̫ÀÏ, ÉõÖÁ²»ÍêÈ«ÕýÈ·. ÀýÈç:
ÈçºÎ½øÐжà±í¸üÐÂ(Ìá½»), ºÜ¶à»Ø¸´»¹ÊÇ˵ÓÃADOConnectionµÄÊÂÎñ, (Èç¹ûҪͬʱ¸üÐÂSQL SERVERºÍOracleÊý¾Ý¿âµÄ±íÔõô°ì).
µ±È»Ò²ÓÐ˵ÓÃSetComplete, SetAbortµÄ. µ«ËµµÄºÜ¼òµ¥, ÆäÖеÄ×¢ÒâÊÂÏîÓÖÊÇÊ ......
н¨Ò»¸ödLL¹¤³Ì,н¨Ò»¸ö´°Ìå Fr_bb80 ,ÎÒÃÇÏÈÔÚËüµÄµ¥ÔªÀï¼ÓÈëÏÂÃæÒ»¸öº¯Êý:
function Report(Title:Pchar):Boolean ;stdcall;
begin
if Fr_bb80=nil then
begin
Fr_bb80:=TFr_bb80.Create(application);
&nb ......
//ÉùÃ÷:
GetClassName(
hWnd: HWND; {Ö¸¶¨´°¿Ú¾ä±ú}
lpClassName: PChar; {»º³åÇø}
nMaxCount: Integer {»º³åÇø´óС}
): Integer; {·µ»ØÀàÃû´óС; ʧ°Ü·µ»Ø 0}
//²âÊÔ1: н¨Ò»¸ö¹¤³Ì, Ö÷´°¿ÚµÄÀàÃûĬÈÏÊÇ TForm1, ÓóÌÐò»ñȡһÏ¿´¿´
var
ps: array[0..254] of Char;
begin
GetCl ......
ÔÚ´°ÌåµÄOnMouseDownʼþÖмÓÈëÏÂÃæ¼¸ÐдúÂë¼´¿É
If Button = mbleft Then
begin
ReleaseCapture;
SendMessage(MainForm.Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
end;
Èô´°ÌåµÄ±íÃæ±»±ðµÄ¿Ø¼þÂĸǵô£¬ÔòÐèÒª°ÑÉÏÃæµÄ´úÂë¼ÓÈëÂĸǵĿؼþÀïÃæ¡£ ......