Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...

Использовать формы, объявленные в DLL

Советы » DLL » Использовать формы, объявленные в DLL

 
  In the example that follows the exe only sees a totally "virtual 
  abstract" interface to the object as is being exported from the dll 
  but it still can create the object and use it. 
  Of course the exe can not see or execute any methods declared in the 
  exe but that is the whole purpose of implementing them in a custom dll 
  to begin with. 

  Im folgenden Beispiel sieht die Exe-Datei nur ein total "virtuelles, abstraktes" 
  Interface zum Objekt, welches aus der Dll importiert wird aber es 
  kann doch dieses Objekt erzeugen und es gebrauchen. 
}


 // Example code: 

program

Dlloader; uses

Sharemem, Forms, exeunit1 in

'exeunit1.pas' {Form1}, DllIntfu in

'DllIntfu.pas'; {$R *.RES} begin

Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end

. //-------------------------- unit

DllIntfu; interface

type

TDllobject = class

protected

function

Get_UserName: string

; virtual

; abstract

; procedure

Set_UserName(Value: string

); virtual

; abstract

; public

property

UserName: string

read

Get_UserName write

Set_UserName; end

; TDllobjectClass = class

of

TDllobject; implementation

end

. //--------------------------- unit

exeunit1; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DllIntfu, StdCtrls; type

TForm1 = class

(TForm) Button1: TButton; procedure

Button1Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end

; var

Form1: TForm1; implementation

{$R *.DFM} type

TDllfunc = function

: TDllobjectClass; stdcall

; procedure

TForm1.Button1Click(Sender: TObject); var

i: DWORD; fHandle: THandle; fDllfunc: TDllfunc; fDllobject: TDllobject; fUserName: string

; begin

fHandle := LoadLibrary('UserName.dll'); if

(fHandle <> 0) then

begin

@fDllfunc := GetProcAddress(fHandle, 'Dllfunc'); if

Assigned(@fDllfunc) then

begin

i := 255; SetLength(fUserName, i); GetUserName(PChar(fUserName), i); fUserName := StrPas(PChar(fUserName)); fDllobject := fDllfunc.Create; fDllobject.UserName := fUserName; ShowMessage(fDllobject.UserName); fDllobject.Free; end

; FreeLibrary(fHandle); end

; end

; end

. //------------------------------- library

UserName; uses

Sharemem, Sysutils, DllIntfu; type

TCustomDllobject = class

(TDllobject) private

fUserName: string

; function

Getfilecount: Integer; protected

function

Get_UserName: string

; override

; procedure

Set_UserName(Value: string

); override

; end

; TCustomDllobjectclass = class

of

TCustomDllobject; function

TCustomDllobject.Getfilecount: Integer; var

doserr: Integer; fsrch: TSearchRec; begin

Result := 0; doserr := FindFirst('*.*', faanyfile, fsrch); if

(doserr = 0) then

begin

while

(doserr = 0) do

begin

if

(fsrch.attr and

faDirectory) = 0 then

Inc(Result); doserr := findnext(fsrch); end

; FindClose(fsrch); end

; end

; function

TCustomDllobject.Get_UserName: string

; begin

Result := 'You signed on as ''' + fUserName + '''' + ' and there ' + IntToStr(Getfilecount) + ' files in this directory.'; end

; procedure

TCustomDllobject.Set_UserName(Value: string

); begin

fUserName := Value; end

; function

Dllfunc: TCustomDllobjectClass; stdcall

; begin

Result := TCustomDllobject; // class type only end

; exports

Dllfunc name 'Dllfunc'; begin

end

.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com