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
}
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
.