1- unit FuncoesDLL;
2-
3- // define interface com funções exportadas da DLL
1+ unit FuncoesDLL;
42
53interface
64
7- function SetClientTCP (ip:PAnsiChar; porta:Integer):PAnsiChar;stdcall; external ' E1_Tef01.dll' ;
5+ uses
6+ Winapi.Windows,
7+ System.SysUtils,
8+ System.IOUtils,
9+ System.Generics.Collections;
810
9- function ConfigurarDadosPDV (textoPinpad:PAnsiChar; versaoAC:PAnsiChar; nomeEstabelecimento:PAnsiChar; loja:PAnsiChar; identificadorPontoCaptura:PAnsiChar):PAnsiChar; stdcall; external ' E1_Tef01.dll' ;
11+ type
12+ TSetClientTCP = function(ip: PAnsiChar; porta: Integer): PAnsiChar; stdcall;
13+ TConfigurarDadosPDV = function(textoPinpad, versaoAC, nomeEstabelecimento, loja, identificadorPontoCaptura: PAnsiChar): PAnsiChar; stdcall;
14+ TIniciarOperacaoTEF = function(dadosCaptura: PAnsiChar): PAnsiChar; stdcall;
15+ TRecuperarOperacaoTEF = function(dadosCaptura: PAnsiChar): PAnsiChar; stdcall;
16+ TRealizarPagamentoTEF = function(codigoOperacao: Integer; dadosCaptura: PAnsiChar; novaTransacao: Boolean): PAnsiChar; stdcall;
17+ TRealizarPixTEF = function(dadosCaptura: PAnsiChar; novaTransacao: Boolean): PAnsiChar; stdcall;
18+ TRealizarAdmTEF = function(codigoOperacao: Integer; dadosCaptura: PAnsiChar; novaTransacao: Boolean): PAnsiChar; stdcall;
19+ TConfirmarOperacaoTEF = function(id, acao: Integer): PAnsiChar; stdcall;
20+ TFinalizarOperacaoTEF = function(id: Integer): PAnsiChar; stdcall;
21+ TRealizarColetaPinPad = function(tipoColeta: Integer; confirmar: Boolean): PAnsiChar; stdcall;
22+ TConfirmarCapturaPinPad = function(tipoCaptura: Integer; dadosCaptura: PAnsiChar): PAnsiChar; stdcall;
1023
11- function IniciarOperacaoTEF (dadosCaptura:PAnsiChar):PAnsiChar; stdcall; external ' E1_Tef01.dll' ;
24+ type
25+ TElginDLL = class (TObject)
26+ strict private const
27+ PASTA_DLL = ' C:\Elgin\TEF\' ;
28+ DLL_ELGIN = PASTA_DLL + ' E1_Tef01.dll' ;
29+ strict private
30+ FCanExecute: Boolean;
31+ FDLLPaths: TList<string>;
32+ FHandles: TList<THandle>;
33+ FSetClientTCP: TSetClientTCP;
34+ FConfigurarDadosPDV: TConfigurarDadosPDV;
35+ FIniciarOperacaoTEF: TIniciarOperacaoTEF;
36+ FRecuperarOperacaoTEF: TRecuperarOperacaoTEF;
37+ FRealizarPagamentoTEF: TRealizarPagamentoTEF;
38+ FRealizarPixTEF: TRealizarPixTEF;
39+ FRealizarAdmTEF: TRealizarAdmTEF;
40+ FConfirmarOperacaoTEF: TConfirmarOperacaoTEF;
41+ FFinalizarOperacaoTEF: TFinalizarOperacaoTEF;
42+ FRealizarColetaPinPad: TRealizarColetaPinPad;
43+ FConfirmarCapturaPinPad: TConfirmarCapturaPinPad;
44+ function LoadDLL (const ADLLName: string): Boolean;
45+ procedure LoadAllDLLs ();
46+ procedure UnloadAllDLLs ();
47+ procedure InitializeFunctionPointers (const AHandle: THandle);
48+ function IntializeFunctionPointer (const AHandle: THandle; const AFunctionName: string): Pointer;
49+ procedure ClearFunctionPointers ();
50+ procedure FillDLLPaths ();
51+ function Execute <T>(const ACall: TFunc<T>): T;
52+ public
53+ constructor Create();
54+ destructor Destroy(); override;
55+ function SetClientTCP (const AIp: string; const APorta: Integer): PAnsiChar;
56+ function ConfigurarDadosPDV (const ATextoPinpad, AVersaoAC, ANomeEstabelecimento, ALoja, AIdentificadorPontoCaptura: string): PAnsiChar;
57+ function IniciarOperacaoTEF (const ADadosCaptura: PAnsiChar): PAnsiChar;
58+ function RecuperarOperacaoTEF (const ADadosCaptura: string): PAnsiChar;
59+ function RealizarPagamentoTEF (const ACodigoOperacao: Integer; const ADadosCaptura: string; const ANovaTransacao: Boolean): PAnsiChar;
60+ function RealizarPixTEF (const ADadosCaptura: string; const ANovaTransacao: Boolean): PAnsiChar;
61+ function RealizarAdmTEF (const ACodigoOperacao: Integer; const ADadosCaptura: string; const ANovaTransacao: Boolean): PAnsiChar;
62+ function ConfirmarOperacaoTEF (const AId, AACao: Integer): PAnsiChar;
63+ function FinalizarOperacaoTEF (const AId: Integer): PAnsiChar;
64+ function RealizarColetaPinPad (const ATipoColeta: Integer; const AConfirmar: Boolean): PAnsiChar;
65+ function ConfirmarCapturaPinPad (const ATipoCaptura: Integer; const ADadosCaptura: string): PAnsiChar;
66+ end ;
1267
13- function RecuperarOperacaoTEF (dadosCaptura:PAnsiChar):PAnsiChar; stdcall; external ' E1_Tef01.dll ' ;
68+ implementation
1469
15- function RealizarPagamentoTEF (codigoOperacao:Integer; dadosCaptura:PAnsiChar; novaTransacao:Boolean):PAnsiChar;stdcall; external ' E1_Tef01.dll ' ;
70+ { TElginDLL }
1671
17- function RealizarPixTEF (dadosCaptura:PAnsiChar; novaTransacao:Boolean):PAnsiChar;stdcall;external ' E1_Tef01.dll' ;
72+ constructor TElginDLL.Create();
73+ begin
74+ FCanExecute := False;
75+ FDLLPaths := TList<string>.Create();
76+ FHandles := TList<THandle>.Create();
77+ Self.FillDLLPaths();
78+ Self.LoadAllDLLs();
79+ end ;
1880
19- function RealizarAdmTEF (codigoOperacao:Integer; dadosCaptura:PAnsiChar; novaTransacao:Boolean):PAnsiChar;stdcall;external ' E1_Tef01.dll' ;
81+ destructor TElginDLL.Destroy();
82+ begin
83+ Self.UnloadAllDLLs();
84+ FHandles.Free();
85+ FDLLPaths.Free();
86+ inherited ;
87+ end ;
2088
21- function ConfirmarOperacaoTEF (id:Integer; acao:Integer):PAnsiChar; stdcall; external ' E1_Tef01.dll' ;
89+ procedure TElginDLL.FillDLLPaths ();
90+ begin
91+ FDLLPaths.Add(PASTA_DLL + ' libwinpthread-1.dll' );
92+ FDLLPaths.Add(PASTA_DLL + ' libgcc_s_dw2-1.dll' );
93+ FDLLPaths.Add(PASTA_DLL + ' libstdc++-6.dll' );
94+ FDLLPaths.Add(PASTA_DLL + ' Qt5Core.dll' );
95+ FDLLPaths.Add(PASTA_DLL + ' Qt5Network.dll' );
96+ FDLLPaths.Add(PASTA_DLL + ' Qt5Gui.dll' );
97+ FDLLPaths.Add(PASTA_DLL + ' Qt5Xml.dll' );
98+ FDLLPaths.Add(DLL_ELGIN);
99+ end ;
22100
23- function FinalizarOperacaoTEF (id:Integer):PAnsiChar; stdcall; external ' E1_Tef01.dll' ;
101+ function TElginDLL.LoadDLL (const ADLLName: string): Boolean;
102+ var
103+ vDLLHandle: THandle;
104+ begin
105+ Result := False;
106+ if not TFile.Exists(ADLLName) then
107+ raise Exception.CreateFmt(' DLL não encontrada na pasta padrão: %s' , [PASTA_DLL + ADLLName]);
24108
25- function RealizarColetaPinPad (tipoColeta: integer; confirmar: boolean): PAnsiChar; stdcall; external ' E1_Tef01.dll' ;
109+ vDLLHandle := GetModuleHandle(PChar(ADLLName));
110+ if vDLLHandle = 0 then
111+ begin
112+ vDLLHandle := LoadLibrary(PChar(ADLLName));
113+ if vDLLHandle = 0 then
114+ raise Exception.CreateFmt(' Erro ao carregar DLL: %s' , [ADLLName]);
115+ end ;
116+ FHandles.Add(vDLLHandle);
26117
27- function ConfirmarCapturaPinPad (tipoCaptura: integer; dadosCaptura: PAnsiChar): PAnsiChar; stdcall; external ' E1_Tef01.dll' ;
118+ if ADLLName = DLL_ELGIN then
119+ Self.InitializeFunctionPointers(vDLLHandle);
120+ Result := True;
121+ end ;
28122
29- implementation
123+ procedure TElginDLL.UnloadAllDLLs ();
124+ begin
125+ Self.ClearFunctionPointers();
126+ for var vHandle in FHandles do
127+ if (GetModuleHandle(PChar(vHandle)) > 0 ) then
128+ FreeLibrary(vHandle);
129+ end ;
130+
131+ procedure TElginDLL.LoadAllDLLs ();
132+ begin
133+ for var vDLL in FDLLPaths do
134+ begin
135+ try
136+ FCanExecute := Self.LoadDLL(vDLL);
137+ if not FCanExecute then
138+ raise Exception.CreateFmt(' Erro ao carregar DLL de dependência: %s' , [vDLL])
139+ except
140+ on E: Exception do
141+ raise Exception.CreateFmt(' Erro ao carregar DLL de dependência %s: %s' , [vDLL, E.Message]);
142+ end ;
143+ end ;
144+ end ;
145+
146+ procedure TElginDLL.InitializeFunctionPointers (const AHandle: THandle);
147+ begin
148+ FSetClientTCP := Self.IntializeFunctionPointer(AHandle, ' SetClientTCP' );
149+ FConfigurarDadosPDV := Self.IntializeFunctionPointer(AHandle, ' ConfigurarDadosPDV' );
150+ FIniciarOperacaoTEF := Self.IntializeFunctionPointer(AHandle, ' IniciarOperacaoTEF' );
151+ FRecuperarOperacaoTEF := Self.IntializeFunctionPointer(AHandle, ' RecuperarOperacaoTEF' );
152+ FRealizarPagamentoTEF := Self.IntializeFunctionPointer(AHandle, ' RealizarPagamentoTEF' );
153+ FRealizarPixTEF := Self.IntializeFunctionPointer(AHandle, ' RealizarPixTEF' );
154+ FRealizarAdmTEF := Self.IntializeFunctionPointer(AHandle, ' RealizarAdmTEF' );
155+ FConfirmarOperacaoTEF := Self.IntializeFunctionPointer(AHandle, ' ConfirmarOperacaoTEF' );
156+ FFinalizarOperacaoTEF := Self.IntializeFunctionPointer(AHandle, ' FinalizarOperacaoTEF' );
157+ FRealizarColetaPinPad := Self.IntializeFunctionPointer(AHandle, ' RealizarColetaPinPad' );
158+ FConfirmarCapturaPinPad := Self.IntializeFunctionPointer(AHandle, ' ConfirmarCapturaPinPad' );
159+ end ;
160+
161+ function TElginDLL.IntializeFunctionPointer (const AHandle: THandle; const AFunctionName: string): Pointer;
162+ begin
163+ Result := GetProcAddress(AHandle, PAnsiChar(AnsiString(AFunctionName)));
164+ if not Assigned(Result) then
165+ raise Exception.CreateFmt(' Não foi possível carregar a função: %s da DLL: %s' , [AFunctionName, DLL_ELGIN]);
166+ end ;
167+
168+ procedure TElginDLL.ClearFunctionPointers ();
169+ begin
170+ @FSetClientTCP := nil ;
171+ @FConfigurarDadosPDV := nil ;
172+ @FIniciarOperacaoTEF := nil ;
173+ @FRecuperarOperacaoTEF := nil ;
174+ @FRealizarPagamentoTEF := nil ;
175+ @FRealizarPixTEF := nil ;
176+ @FRealizarAdmTEF := nil ;
177+ @FConfirmarOperacaoTEF := nil ;
178+ @FFinalizarOperacaoTEF := nil ;
179+ @FRealizarColetaPinPad := nil ;
180+ @FConfirmarCapturaPinPad := nil ;
181+ end ;
182+
183+ function TElginDLL.Execute <T>(const ACall: TFunc<T>): T;
184+ begin
185+ if not FCanExecute then
186+ Exit();
187+ try
188+ Result := ACall();
189+ except
190+ on E: Exception do
191+ begin
192+ raise Exception.CreateFmt(' Erro ao executar função. Detalhes: %s' , [E.Message]);
193+ end ;
194+ end ;
195+ end ;
196+
197+ function TElginDLL.RealizarAdmTEF (const ACodigoOperacao: Integer; const ADadosCaptura: string; const ANovaTransacao: Boolean): PAnsiChar;
198+ begin
199+ Result := Self.Execute<PAnsiChar>(
200+ function: PAnsiChar
201+ begin
202+ Result := FRealizarAdmTEF(ACodigoOperacao, PAnsiChar(AnsiString(ADadosCaptura)), ANovaTransacao);
203+ end
204+ );
205+ end ;
206+
207+ function TElginDLL.RealizarColetaPinPad (const ATipoColeta: Integer; const AConfirmar: Boolean): PAnsiChar;
208+ begin
209+ Result := Self.Execute<PAnsiChar>(
210+ function: PAnsiChar
211+ begin
212+ Result := FRealizarColetaPinPad(ATipoColeta, AConfirmar);
213+ end
214+ );
215+ end ;
216+
217+ function TElginDLL.RealizarPagamentoTEF (const ACodigoOperacao: Integer; const ADadosCaptura: string; const ANovaTransacao: Boolean): PAnsiChar;
218+ begin
219+ Result := Self.Execute<PAnsiChar>(
220+ function: PAnsiChar
221+ begin
222+ Result := FRealizarPagamentoTEF(ACodigoOperacao, PAnsiChar(AnsiString(ADadosCaptura)), ANovaTransacao);
223+ end
224+ );
225+ end ;
226+
227+ function TElginDLL.RealizarPixTEF (const ADadosCaptura: string; const ANovaTransacao: Boolean): PAnsiChar;
228+ begin
229+ Result := Self.Execute<PAnsiChar>(
230+ function: PAnsiChar
231+ begin
232+ Result := FRealizarPixTEF(PAnsiChar(AnsiString(ADadosCaptura)), ANovaTransacao);
233+ end
234+ );
235+ end ;
236+
237+ function TElginDLL.RecuperarOperacaoTEF (const ADadosCaptura: string): PAnsiChar;
238+ begin
239+ Result := Self.Execute<PAnsiChar>(
240+ function: PAnsiChar
241+ begin
242+ Result := FRecuperarOperacaoTEF(PAnsiChar(AnsiString(ADadosCaptura)));
243+ end
244+ );
245+ end ;
246+
247+ function TElginDLL.SetClientTCP (const AIp: string; const APorta: Integer): PAnsiChar;
248+ begin
249+ Result := Self.Execute<PAnsiChar>(
250+ function: PAnsiChar
251+ begin
252+ Result := FSetClientTCP(PAnsiChar(AnsiString(AIp)), APorta);
253+ end
254+ );
255+ end ;
256+
257+ function TElginDLL.IniciarOperacaoTEF (const ADadosCaptura: PAnsiChar): PAnsiChar;
258+ begin
259+ Result := Self.Execute<PAnsiChar>(
260+ function: PAnsiChar
261+ begin
262+ Result := FIniciarOperacaoTEF(ADadosCaptura);
263+ end
264+ );
265+ end ;
266+
267+ function TElginDLL.FinalizarOperacaoTEF (const AId: Integer): PAnsiChar;
268+ begin
269+ Result := Self.Execute<PAnsiChar>(
270+ function: PAnsiChar
271+ begin
272+ Result := FFinalizarOperacaoTEF(AId);
273+ end
274+ );
275+ end ;
276+
277+ function TElginDLL.ConfigurarDadosPDV (const ATextoPinpad, AVersaoAC, ANomeEstabelecimento, ALoja, AIdentificadorPontoCaptura: string): PAnsiChar;
278+ begin
279+ Result := Self.Execute<PAnsiChar>(
280+ function: PAnsiChar
281+ begin
282+ Result := FConfigurarDadosPDV(PAnsiChar(AnsiString(ATextoPinpad)),
283+ PAnsiChar(AnsiString(AVersaoAC)),
284+ PAnsiChar(AnsiString(ANomeEstabelecimento)),
285+ PAnsiChar(AnsiString(ALoja)),
286+ PAnsiChar(AnsiString(AIdentificadorPontoCaptura)));
287+ end
288+ );
289+ end ;
290+
291+ function TElginDLL.ConfirmarCapturaPinPad (const ATipoCaptura: Integer; const ADadosCaptura: string): PAnsiChar;
292+ begin
293+ Result := Self.Execute<PAnsiChar>(
294+ function: PAnsiChar
295+ begin
296+ Result := FConfirmarCapturaPinPad(ATipoCaptura, PAnsiChar(AnsiString(ADadosCaptura)));
297+ end
298+ );
299+ end ;
300+
301+ function TElginDLL.ConfirmarOperacaoTEF (const AId, AACao: Integer): PAnsiChar;
302+ begin
303+ Result := Self.Execute<PAnsiChar>(
304+ function: PAnsiChar
305+ begin
306+ Result := FConfirmarOperacaoTEF(AId, AACao);
307+ end
308+ );
309+ end ;
30310
31- end .
311+ end .
0 commit comments