[ FranjoZG @ 16.03.2022. 09:37 ] @
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. |