Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Delphi DLL klase

[es] :: Pascal / Delphi / Kylix :: Delphi DLL klase

[ Pregleda: 629 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.st4.cable.xnet.hr.



+4 Profil

icon Delphi DLL klase16.03.2022. u 09:37 - pre 24 meseci
Zanima me da li griješim i da li će se poslije pokazati da nije dobro rješenje...
Osnovni program: D2007
Dll: XE 10.1

- U Dll-u kreiram klasu
- u posebnom unit-u defniran interface koji stavljam u uses Dll-a i programa
- u unit-u CertifikatInterface:
Code:

unit CertifikatInterface;
interface
type
   ICertifikat=interface
      ['{D3B99678-7540-416E-87D8-FCABD7CB307A}']
      function Preview(IO: integer): integer;
      function SaveToPDF(IO: integer): integer;
      function Error: string;
      function VratiTestString: string;
      function HasError: boolean;
      function BrojStranica: integer;
   end;                       

implementation

end.


- U Dll-u imam export:
Code:


library DllCertifikatl;

uses CertifikatInterface;
...
type
   tCert=class(TInterfacedObject, ICertifikat)
      constructor Create;
      destructor Destroy; override;
   ...
   end;
 
   ...
   function CreateCertifikat: ICertifikat; stdcall; export;
   begin
      result := tCertifikat.Create;
   end;
   
   exports
     CreateCertifikat;


- u osnovnom programu (D2007) imam:

Code:

uses CertifikatInterface;
...
   TFormMain=class(TForm)
   ...
   public
      Certifikat: ICerifiakt
   end;
   ....

implementation

{$R *.dfm}

   function CreateCertifikat: ICertifikat; stdcall; external 'DllCertifikat.dll';

   procedure TFormMain.Button2Click(Sender: TObject);
   begin
      if not Assigned(Certifikat) then 
         Certifikat := CreateCertifikat;
   end;


Razlog zašto to radim je FastReport.
U Dll-u kreiram zasebnu konekciju na bazu, formu koja je "visible=false" na kojoj je dataconnection, fastreport, qry itd.
Nakon toga pristupam interface-u "Crtifikat" kao da je kreiran u osnovnom programu. Prosljeđujem pramatere, porperty-e, uzimam rezultate funkcija kao da je sve u osnovnom programu, ne brinem o tipu parametra. String ostaje string, ne koristim PChar itd.
Koliko je to ispravno ili će mi kasnije stvarati probleme?
Ugradio sam to u program koji je prilično velik i sve (koliko sam mogao vidjeti i testirati) radi ispravno.


 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Delphi DLL klase17.03.2022. u 05:52 - pre 24 meseci
Kao ideja deluje OK, COM tako radi.
Ja sad ne mogu da se setim da li su Delphi interfejsi nesto specificni pa implementacija/ponasanje zavisi od verzije kompajlera. Ako si testirao i radi, verujem da ce biti u redu.

Izmeni funkcije koje salju string, moze da bude problem jer ne dele memoriju, bolje je koristiti WideString, PChar ili OleVariant.


 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Delphi DLL klase

[ Pregleda: 629 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.