unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} uses uSimpleClassReg; type TDllFunc = function: Boolean; stdcall; procedure MakeReport(Dest: TMemo; DllInit, DllIsRegistered, DllRegister, DllUnRegister: TDllFunc); var S: string; begin Dest.Clear; WriteStr(S, 'Dll Init result = ', DllInit); Dest.Append(S); WriteStr(S, 'Is registered in EXE = ', IsClassRegistered(HInstance)); Dest.Append(S); WriteStr(S, 'Regiser in EXE result = ', RegisterClass(HInstance)); Dest.Append(S); WriteStr(S, 'Is registered in EXE = ', IsClassRegistered(HInstance)); Dest.Append(S); WriteStr(S, 'Is registered in DLL = ', DllIsRegistered); Dest.Append(S); WriteStr(S, 'Regiser in DLL result = ', DllRegister); Dest.Append(S); WriteStr(S, 'Is registered in DLL = ', DllIsRegistered); Dest.Append(S); WriteStr(S, 'UnRegiser in DLL result = ', DllUnRegister); Dest.Append(S); WriteStr(S, 'Is registered in DLL = ', DllIsRegistered); Dest.Append(S); WriteStr(S, 'Is registered in EXE = ', IsClassRegistered(HInstance)); Dest.Append(S); WriteStr(S, 'UnRegiser in EXE result = ', UnRegisterClass(HInstance)); Dest.Append(S); WriteStr(S, 'Is registered in EXE = ', IsClassRegistered(HInstance)); Dest.Append(S); end; procedure TForm1.Button1Click(Sender: TObject); var DllIsRegistered: TDllFunc; DllRegister: TDllFunc; DllUnRegister: TDllFunc; DllInit: TDllFunc; LibHandle: TLibHandle; begin LibHandle := SafeLoadLibrary('project1Dll.dll'); if LibHandle <> 0 then try DllIsRegistered := TDllFunc(GetProcAddress(LibHandle, 'DllIsRegistered')); DllRegister := TDllFunc(GetProcAddress(LibHandle, 'DllRegister')); DllUnRegister := TDllFunc(GetProcAddress(LibHandle, 'DllUnRegister')); DllInit := TDllFunc(GetProcAddress(LibHandle, 'DllInit')); if Assigned(DllInit) and Assigned(DllIsRegistered) and Assigned(DllRegister) and Assigned(DllUnRegister) then begin MakeReport(Memo1, DllInit, DllIsRegistered, DllRegister, DllUnRegister); end else ShowMessage('Get Proc Address failed!'); finally UnloadLibrary(LibHandle); end else ShowMessage('Unable to load library!'); end; function DllInit: Boolean; stdcall; external 'project1Dll.dll'; function DllIsRegistered: Boolean; stdcall; external 'project1Dll.dll'; function DllRegister: Boolean; stdcall; external 'project1Dll.dll'; function DllUnRegister: Boolean; stdcall; external 'project1Dll.dll'; procedure TForm1.Button2Click(Sender: TObject); begin MakeReport(Memo1, @DllInit, @DllIsRegistered, @DllRegister, @DllUnRegister); end; end.