Ir para conteúdo
  • Cadastre-se

dev botao

Erro Na Função Abreportaserialdll Em Acbrecfbematech


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

Recommended Posts

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
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Realmente, imagino que tenha passado desapercebido porque a maioria dos usuários usa o diretório do app ao invés de um diretório a parte para as dlls.

Já está disponível no repositório, obrigado pela colaboração.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

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 ;
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3347 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.

The popup will be closed in 10 segundos...