Inquiridor
Problemas em retornar strings da BemaFI32.dll

Pergunta
-
Saudações a todos
depois de alguns meses (120 para ser exato), estou retomando a programação de aplicativos comerciais.
Retomando um caso para as impressoras fiscais Bematech, estou me adaptando à DLL BemaFI32.dll, que permite o retorno de informações da impressora via strings (eu uso Delphi para programar).
Obter o retorno pelos arquivos eu faço normalmente, pois isso que se fazia no tempo na MP20FI.dll, e continua funcionando agora também, mas eu desejo utilizar as variáveis nas funções, pois é sem dúvida uma forma mais elegante.
No entanto, quando uso esse método, o retorno (iret) volta corretamente (-1), mas não há alteração das strings:
Segue abaixo o código que uso como teste:
---------------------------------------------------------
unit Unit1;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses MyBemaFI32; //essa unit é a cópia das declarações em Delphi a partir do help da DLL
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var iret: integer;
NS: string;begin
NS:='';
Bematech_FI_AbrePortaSerial;
iret:= Bematech_FI_ImprimeConfiguracoesImpressora;
Form1.Caption:=inttostr(iret) + ' -- '+NS;
Bematech_FI_FechaPortaSerial;
end;procedure TForm1.Button2Click(Sender: TObject);
var P:pchar;
iret: integer;
S: string;begin
S:='******************';
p:='******************';
Bematech_FI_AbrePortaSerial;
iret:= Bematech_FI_NumeroSerie(pchar(S)); // com P no lugar de pchar(S) também não funciona
Form1.Caption:=inttostr(iret) + ' -- '+string(P)+S;
Bematech_FI_FechaPortaSerial;end;
end.
------------------------------------------------------------------------------------
O Button1, funciona 100%, imprimindo as cfgs. no emulador. Mas o Button2 retorna o status 1, mas não há alteração dos '********' na string.
Já quando acerto o BemaFi32.ini para sair em arquivos, tudo dá certo, ou seja, no arquivo as respostas estão corretas.
o arquivo .ini está assim (parcial, inicio):
-----------------------------------------------------------------
;----------------------------------------------------------------------------;
; ;
; BEMAFI32.INI ;
; Ver 5.6.0.0 - Julho/2007 ;
; ;
; Arquivo de inicializacao da dll BemaFI32 para as impressoras fiscais ;
; MP-20 FI II, MP-40 FI II, MP-2000 FI TH, MP-2100 TH FI, MP-3000 TH FI ;
; MP-6000 FI TH, MP-25 FI, MP-50 FI da Bematech e Y-8000 e Y-8500 da Yanco ;
; ;
;----------------------------------------------------------------------------;[Sistema]
Porta=DEFAULT
Path=C:\
Status=0
Retorno=0
StatusFuncao=0
ControlePorta=1
ModeloImp=BEMATECH
ConfigRede=0
ModoGaveta=0
Log=0
LogDiario=0
CrLfVinculado=1
CrLfGerencial=1
TimeOutGerencial=40
EmulMFD=1
StatusCheque=
[MFD]
Impressora=0
StatusErro=1
TimeOutZ=3
[Opcional]
Favorecido=
Cidade=[SoftwareHouse]
COO=
NumeroAplicativo=
CNPJ=
IE=
IM=
RazaoSocial=
NomeAplicativo=
Versao=
Linha1=
Linha2=
-------------------------------------------------
Alguém pode me dar uma luz? Onde será que estou errando?
Agradeço a que puder me ajudar a desenferrujar....
Aron L. Petrucci
Todas as Respostas
-
Olá Aron,
Experimente usar a função assim:
SetLength( NumeroSerie, 15 );
iRetorno := Bematech_FI_NumeroSerie( NumeroSerie );
Detalhe:
Como vc está usando o emulador da impressora fiscal térmica, o número de série retornado será a palavra "EMULADOR", porém para vc deixar a aplicação já preparada para o uso da impressora, o ideal é que vc use a função Bematech_FI_NumeroSerieMFD que trará 20 bytes do número serial real da impressora. Esta função tbm pode ser usada no emulador para os testes.
SetLength( NumeroSerie, 20 );
iRetorno := Bematech_FI_NumeroSerieMFD( NumeroSerie );
Habilte tbm no arquivo BemaFI32.ini a chave Impressora para 1, pois assim as funções que possuem a sigla MFD terão o efeito adequado.
Ats,
André Munhoz
andre.munhoz@bematech.com.br -
-