Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
libraryDLLEntryLib; 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 } unitMainFrm; 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
.