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
Ïà¹ØÎĵµ£º
//¼Óһϰ´Å¥£¬¼ÓÒ»¸ö¶Ô»°¿ò¾ÍOKÀ²
procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
if OpenDialog1.Execute then
begin
s := OpenDialog1.FileName;
WinExec( PChar(s), SW_NORMAL);
end;
end;
----------------------- ......
Ò»¡¢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±àÂë¹æ·¶Îĵµ
Ŀ¼
1¡¢Ç°ÑÔ 3
2¡¢Ô´³ÌÐòÊéд¹æ·¶ 3
2.1ͨÓÃÔ´´úÂë¸ñʽ¹æ·¶ 3
2.1.1Ëõ½ø 3
2.1.2±ß¾à 3
2.1.3 Begin…EndÓï¾ä 3
2.1.4×¢ÊÍ 4
2.2 OBJECT PASCALÓï¾ä¸ñʽÊéд¹æ·¶ÓëÓ÷¨ 4
2.2.1À¨ºÅ 4
2.2.2±£Áô×ֺ͹ؼü×Ö 4
2.2.3¹ý³ÌºÍº¯Êý 5
2.2.4±äÁ¿ 5
2.2.5ÀàÐÍ 6
2.2.6Óï¾ä 6
2.2.7½á¹¹» ......
//ÉùÃ÷:
GetClassName(
hWnd: HWND; {Ö¸¶¨´°¿Ú¾ä±ú}
lpClassName: PChar; {»º³åÇø}
nMaxCount: Integer {»º³åÇø´óС}
): Integer; {·µ»ØÀàÃû´óС; ʧ°Ü·µ»Ø 0}
//²âÊÔ1: н¨Ò»¸ö¹¤³Ì, Ö÷´°¿ÚµÄÀàÃûĬÈÏÊÇ TForm1, ÓóÌÐò»ñȡһÏ¿´¿´
var
ps: array[0..254] of Char;
begin
GetCl ......
ÓÉÓÚ×é¼þÌṩµÄ·½Ê½²»Í¬£¬ËùÒÔ°²×°µÄ·½·¨Ò²ÊDz»Ò»ÑùµÄ£¬ÏÂÃæ¾ÍĿǰ³£¼ûµÄ¸÷ÖÖÐÎʽµÄ×é¼þµÄ°²×°·½·¨½éÉÜһϡ£
1¡¢Ö»ÓÐÒ»¸ödcuÎļþµÄ×é¼þ¡£dcuÎļþÊDZàÒëºÃµÄµ¥ÔªÎļþ£¬ÕâÑùµÄ×é¼þÊÇ×÷Õß²»Ïë°ÑÔ´Â빫²¼¡£Ò»°ãÀ´Ëµ£¬×÷Õß±ØÐë˵Ã÷´Ë×é¼þÊʺÏdelphiµÄÄÄÖÖ°æ±¾£¬Èç¹û°æ±¾²»¶Ô£¬ÔÚ°²×°Ê±¾Í»á³öÏÖ´íÎó¡£Ò²ÕýÊÇÒòΪûÓÐÔ´Â룬¸øÊ ......