DelphiÖÐDLL³õʼ»¯ºÍÍ˳ö´¦Àí
DelphiÖÐDLL³õʼ»¯ºÍÍ˳ö´¦Àí
choysan
2010-01-08 8:56:43
<1>ÀûÓÃUnitµÄInitalizationÓëFinalizationÕâÁ½¸öС½Ú
¡¡¡¡¿ÉÒÔÔÚUnitµÄÕâÁ½¸öС½ÚÖа²ÅÅUnitµÄ½øÈëºÍÍ˳ö£¬µ«ÊÇ
ProgramÓëLibrary²¢Ã»ÓÐÕâÁ½¸ö²¿·Ö£¬ËùÒÔÖ»ÄÜдÔÚUnitÖС£
<2>ÀûÓÃExitProc±äÁ¿
¡¡¡¡ÔÚLibraryµÄbegin..end.ÖмäÊÇ¿ÉÒÔд´úÂëµÄ£¬ÕâÀï¿ÉÒÔ·ÅÖÃ
DLL³õʼ»¯´úÂë¡£Èç¹ûÏëÒª×öÉÆºó¹¤×÷£¬Ôò¿ÉÒÔÀûÓÃExitProc±äÁ¿¡£
ÎÒÃÇÊ×ÏÈÔÚ³õʼ»¯´úÂëÖаÑExitProcÖаüº¬µÄĬÈϵÄÉÆºó¹ý³ÌµØÖ·±£
´æÏÂÀ´£¬È»ºó°Ñ×Ô¶¨ÒåµÄ¹ý³ÌµÄµØÖ·¸³¸øËü£¬ÕâÑùDLLÍ˳öʱ¾Í»áÖ´
ÐÐÎÒÃÇÖÆ¶¨µÄ³ÌÐò£»ÔÚ×Ô¶¨ÒåµÄ¹ý³ÌµÄ×îºó£¬°ÑExitProc»Ö¸´ÔÀ´µÄ
ĬÈÏÖµ£¬ÒÔ±ãDLLÄܹ»¼ÌÐøÍê³ÉÔÀ´Ä¬ÈϵÄÉÆºó¹¤×÷¡£ÏÂÃæÊÇʾÀý£º
¡¡¡¡library MyDLL;
¡¡¡¡...
¡¡¡¡OldExitProc: pointer;
¡¡¡¡...
¡¡¡¡procedure MyExitProc;
¡¡¡¡begin
¡¡¡¡... //ÉÆºó³ÌÐò
¡¡¡¡ExitProc := OldExitProc;
¡¡¡¡end;
¡¡¡¡...
¡¡¡¡begin
¡¡¡¡... //³õʼ»¯³ÌÐò
¡¡¡¡OldExitProc := ExitProc;
¡¡¡¡ExitProc := @MyExitProc;
¡¡¡¡end.
<3>ÀûÓÃDllProc±äÁ¿
¡¡¡¡ºÍExitProcÒ»Ñù£¬DllProcÒ²ÊÇÒ»¸öÔÚSystemdµ¥ÔªÖÐÔ¤¶¨ÒåµÄ±ä
Á¿¡£ÔÚʹÓÃDLLProcʱ, ±ØÐëÏÈдºÃÒ»¸ö¾ßÓÐÒÔÏÂÔÐ͵ijÌÐò:
¡¡¡¡procedure DLLHandler(Reason: integer);
²¢ÔÚlibraryµÄbegin..end.Ö®¼ä, ½«Õâ¸öDLLHandler³ÌÐòµÄÖ´ÐеØ
Ö·¸³¸øDLLProcÖÐ, Õâʱ¾Í¿ÉÒÔ¸ù¾Ý²ÎÊýReasonµÄÖµ·Ö±ð×÷³öÏàÓ¦µÄ
´¦Àí¡£ÁíÍâ×¢ÒâÒª½«Windowsµ¥Ôª¼ÓÈëuses×Ӿ䡣ʾÀýÈçÏÂ:
¡¡¡¡library TestDLL;
¡¡¡¡...
procedure MyDLLHandler(Reason: integer);
begin
case Reason of
DLL_PROCESS_DETACH:
begin
ShowMessage('Õû¸öDLLµÄÉÆáá³ÌÐò');
end;
DLL_Process_Attach:
begin
ShowMessage('Õû¸öDLLµÄ³õʼ»¯´úÂë');
end;
DLL_Thread_Attach:
begin
ShowMessage('µ±Ö÷½Ð¶Ë¿ªÊ¼Ò»¸öThreadʱ');
end;
DLL_Thread_Detach:
Ïà¹ØÎĵµ£º
ÔÚ´°ÌåµÄOnMouseDownʼþÖмÓÈëÏÂÃæ¼¸ÐдúÂë¼´¿É
If Button = mbleft Then
begin
ReleaseCapture;
SendMessage(MainForm.Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
end;
Èô´°ÌåµÄ±íÃæ±»±ðµÄ¿Ø¼þÂĸǵô£¬ÔòÐèÒª°ÑÉÏÃæµÄ´úÂë¼ÓÈëÂĸǵĿؼþÀïÃæ¡£ ......
function BrowseCallbackProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer; stdcall;
begin
if uMsg = BFFM_INITIALIZED then
begin
SendMessage(Wnd, BFFM_SETSELECTION, 1, lpData);
SetWindowText(Wnd, 'Ñ¡ÔñÒ»¸öÄ¿±ê');
end;
Result := 0;
end;
//hdl: ´°¿Ú¾ä±ú
//Root: ¸ùÄ ......
Êý×éÊÇ¿ÉÒÔͨ¹ýË÷ÒýÀ´ÒýÓõÄͬÀàÐÍÊý¾ÝµÄÁÐ±í¡£°´ÕÕ´æ´¢¿Õ¼äµÄ»ñÈ¡·½Ê½£¬Delphi
Ö§³ÖµÄÊý×éÀàÐÍÓÐÁ½ÖÖ£¬¼´¾²Ì¬Êý×éºÍ¶¯Ì¬Êý×é¡£Ëùν¾²Ì¬Êý×é¾ÍÊÇÔÚÉùÃ÷ʱ¾ÍÒѾȷ¶¨´óСµÄÊý×éÀàÐÍ£¬¶ø¶¯Ì¬Êý×éÊÇÖ¸Æä´óСÔÚÉùÃ÷ʱ²»ÄÜÈ·¶¨µÄÊý×飬¶¯Ì¬Êý×éµÄ´óСÔÚʹÓÃʱȷ¶¨¡£
ÉùÃ÷¾²Ì¬Êý×éµÄ·½Ê½·Ç³£¼òµ¥£¬Ö»ÒªÖ¸Ã÷Êý×鳤¶ÈºÍÊý¾ÝÀàÐÍ ......
֮ǰ×öÒ»¸ö³ÌÐò£¬ÓÃListBox¶ÁÈëÒ»¸öÎı¾Îļþ£¬µ«Îı¾ÖÐÓпÕÐУ¬ÎªÁËɾ³ýÆäÖеĿÕÐУ¬ÕÛÌÚÁ˺ó¤Ê±¼ä¡£
Ïȸø³öÒ»¶Î´úÂë¸ø´ó¼Ò¿´
var
i:Integer;
begin
ListBox1.Items.LoadfromFile('data.txt');
for i:=0 to ListBox1.Count - 1 do
begin
  ......