Ir para conteúdo
  • Cadastre-se

dev botao

Erro Na Função Abreportaserialdll Em Acbrecfbematech


Ver Solução Respondido por daniel.breda,
  • Este tópico foi criado há 3571 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

O caminho que está buscando o arquivo INI é o do executável, enquanto  o correto seria puxar de onde esta a DLL, ficando assim:

 

Errado:
 
{$IFDEF MSWINDOWS}
   {$IFDEF CPU64}
    IniFile := ExtractFilePath( ParamStr(0) )+'BemaFi64.INI' ;
   {$ELSE}
    IniFile := ExtractFilePath( ParamStr(0) )+'BemaFi32.INI' ;
   {$ENDIF}
   if FileExists( IniFile ) then
      ConfiguraBemaFI32ini(aPorta, aPath);
  {$ENDIF}
 
 
Correto:
 
{$IFDEF MSWINDOWS}
   {$IFDEF CPU64}
    IniFile := ExtractFilePath(PathDLL)+'BemaFi64.INI' ;
   {$ELSE}
    IniFile := ExtractFilePath(PathDLL)+'BemaFi32.INI' ;
   {$ENDIF}
   if FileExists(IniFile) then
      ConfiguraBemaFI32ini(aPorta, aPath);
  {$ENDIF}

 

  • Curtir 1
  • 4 semanas depois ...
Postado

Segue correção em toda a função:

 

procedure TACBrECFBematech.AbrePortaSerialDLL(const aPath: String);
Var
  Resp : Integer ;
  aPorta, IniFile : String ;


  {$IFDEF MSWINDOWS}
  procedure ConfiguraBemaFI32ini(const aPorta, aPath : String ) ;
  var
    Ini : TIniFile ;
  begin
    GravaLog( '   Verificando arquivo: '+IniFile+', Porta:'+aPorta+', Path:'+aPath );


    Ini := TIniFile.Create( IniFile );
    try
       Ini.WriteString('Sistema','Porta',aPorta ) ;
       Ini.WriteString('Sistema','ControlePorta','1') ;
       if aPath <> '' then
          Ini.WriteString('Sistema','Path',aPath ) ;
    finally
       Ini.Free ;
    end ;
  end;
  {$ENDIF}


begin
  aPorta := fpDevice.Porta;


  GravaLog( '   Desativando ACBrECF' );
  Ativo := False ;
  Sleep( 300 ) ;


  {$IFDEF MSWINDOWS}
   {$IFDEF CPU64}
    IniFile := ExtractFilePath(PathDLL)+'BemaFi64.INI' ;
   {$ELSE}
    IniFile := ExtractFilePath(PathDLL)+'BemaFi32.INI' ;
   {$ENDIF}
   if FileExists(IniFile) then
      ConfiguraBemaFI32ini(aPorta, PathDLL);
  {$ENDIF}


  LoadDLLFunctions;


  {$IFDEF MSWINDOWS}
   xBematech_FI_ReloadINIFile;
  {$ENDIF}


  GravaLog( '   xBematech_FI_AbrePortaSerial' );
  Resp := xBematech_FI_AbrePortaSerial();
{
  1: OK.
 -4: O arquivo de inicialização BemaFI32.ini não foi encontrado no diretório de sistema do Windows.
 -5: Erro ao abrir a porta de comunicação.
}
  {$IFDEF MSWINDOWS}
   if Resp = -4 then
   begin
      GravaLog( '      Erro = -4' );
      ConfiguraBemaFI32ini( aPorta, PathDLL ) ;
      GravaLog( '   xBematech_FI_AbrePortaSerial' );
      Resp := xBematech_FI_AbrePortaSerial();
   end ;
  {$ENDIF}


(*
  if Resp = -5 then
  begin
     GravaLog( '      Erro = -5' );
     ConfiguraBemaFI32ini( 'Default', aPath ) ;
     GravaLog( '   xBematech_FI_AbrePortaSerial' );
     Resp := xBematech_FI_AbrePortaSerial();
  end ;
*)


  if Resp <> 1 then
     raise EACBrECFErro.Create( ACBrStr('Erro em Bematech_FI_AbrePortaSerial'+sLineBreak+
                                AnalisarRetornoDll(Resp) ));
end ;
  • Este tópico foi criado há 3571 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.