![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Отслеживание из DLL ее присоединение к процессу и отсоединениеDelphi , Файловая система , DLL и PlugInsАвтор: Xavier Pacheco library DLLEntryLib; uses SysUtils, Windows, Dialogs, Classes; procedure DLLEntryPoint(dwReason: DWord); begin case dwReason of DLL_PROCESS_ATTACH: ShowMessage('Attaching to process'); DLL_PROCESS_DETACH: ShowMessage('Detaching from process'); DLL_THREAD_ATTACH: MessageBeep(0); DLL_THREAD_DETACH: MessageBeep(0); end; end; begin { First, assign the procedure to the DLLProc variable } DllProc := @DLLEntryPoint; { Now invoke the procedure to reflect that the DLL is attaching to the process } DLLEntryPoint(DLL_PROCESS_ATTACH); end. { Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira } unit MainFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Gauges; type { Define a TThread descendant } TTestThread = class(TThread) procedure Execute; override; procedure SetCaptionData; end; TMainForm = class(TForm) btnLoadLib: TButton; btnFreeLib: TButton; btnCreateThread: TButton; btnFreeThread: TButton; lblCount: TLabel; procedure btnLoadLibClick(Sender: TObject); procedure btnFreeLibClick(Sender: TObject); procedure btnCreateThreadClick(Sender: TObject); procedure btnFreeThreadClick(Sender: TObject); procedure FormCreate(Sender: TObject); private LibHandle: THandle; TestThread: TTestThread; Counter: Integer; GoThread: Boolean; end; var MainForm: TMainForm; implementation {$R *.DFM} procedure TTestThread.Execute; begin while MainForm.GoThread do begin Synchronize(SetCaptionData); Inc(MainForm.Counter); end; end; procedure TTestThread.SetCaptionData; begin MainForm.lblCount.Caption := IntToStr(MainForm.Counter); end; procedure TMainForm.btnLoadLibClick(Sender: TObject); { This procedure loads the library DllEntryLib.DLL } begin if LibHandle = 0 then begin LibHandle := LoadLibrary('DLLENTRYLIB.DLL'); if LibHandle = 0 then raise Exception.Create('Unable to Load DLL'); end else MessageDlg('Library already loaded', mtWarning, [mbok], 0); end; procedure TMainForm.btnFreeLibClick(Sender: TObject); { This procedure frees the library } begin if not (LibHandle = 0) then begin FreeLibrary(LibHandle); LibHandle := 0; end; end; procedure TMainForm.btnCreateThreadClick(Sender: TObject); { This procedure creates the TThread instance. If the DLL is loaded a message beep will occur. } begin if TestThread = nil then begin GoThread := True; TestThread := TTestThread.Create(False); end; end; procedure TMainForm.btnFreeThreadClick(Sender: TObject); { In freeing the TThread a message beep will occur if the DLL is loaded. } begin if not (TestThread = nil) then begin GoThread := False; TestThread.Free; TestThread := nil; Counter := 0; end; end; procedure TMainForm.FormCreate(Sender: TObject); begin LibHandle := 0; TestThread := nil; end; end. Это проект на языке Delphi, который демонстрирует привязку и отключение DLL (динамической связанной библиотеки) к/от процесса, а также создание и остановка потока. Вот разбивка кода: Входная точка DLL
DLL-элемент входной точки определена в модуле
Процедура просто отображает сообщения с помощью функции Основная форма
Основная форма (
Основная форма также содержит целочисленную переменную Класс потока
Класс Когда кнопка Когда кнопка Создание формы
Событийный обработчик создания формы инициализирует handle DLL и экземпляр потока в В целом, это проект демонстрирует, как DLL может взаимодействовать с процессом и потоками в Delphi. Отслеживание из DLL ее присоединение к процессу и отсоединение реализуется с помощью процедуры DLEntryPoint, которая вызывается при изменении состояния процесса или нити. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DLL и PlugIns ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |