Ir para conteúdo
  • Cadastre-se

dev botao

Exemplo de utilização ACBr32.dll


  • Este tópico foi criado há 4329 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Estou utilizando a dll ACBr32.dll em um projeto em Deplhi 6 para controle de impressoras. Não consegui instalar os componentes do ACBr no Delphi por conta de outros pacotes que o meu sistema utiliza e que não podem ser retirados (algum outro programador criou) que não permitem que o ACBr seja instalado (dá erro na instalação do ACBrSerial.dpk).

Fiz um projetinho simples em Delphi apenas para testar a ativação da porta da impressora mas não sei o que posso estar fazendo de errado. Alguém pode me ajudar. Abaixo vai o código com o click do botão que ativa a impressora:

unit Unit1; 


interface 


uses 

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 

Forms, Dialogs, StdCtrls; 


type 

TForm1 = class(TForm) 

Button1: TButton; 

procedure Button1Click(Sender: TObject); 

private 

{ Private declarations } 

public 

{ Public declarations } 

end; 


var 


Form1: TForm1; 

Function ECF_Create(const ecfHandle: pointer) : Integer; {$IFDEF STDCALL} stdcall; {$ENDIF} {$IFDEF CDECL} cdecl; {$ENDIF} external 'ACBr32.dll'; 

Function ECF_SetModelo(const ecfHandle: pointer; const Modelo : Integer) : Integer; {$IFDEF STDCALL} stdcall; {$ENDIF} {$IFDEF CDECL} cdecl; {$ENDIF} external 'ACBr32.dll'; 

Function ECF_SetPorta(const ecfHandle: pointer; const Porta : pChar) : Integer; {$IFDEF STDCALL} stdcall; {$ENDIF} {$IFDEF CDECL} cdecl; {$ENDIF} external 'ACBr32.dll'; 

Function ECF_Ativar(const ecfHandle: pointer) : Integer; {$IFDEF STDCALL} stdcall; {$ENDIF} {$IFDEF CDECL} cdecl; {$ENDIF} external 'ACBr32.dll'; 

Function ECF_Desativar(const ecfHandle: pointer) : Integer; {$IFDEF STDCALL} stdcall; {$ENDIF} {$IFDEF CDECL} cdecl; {$ENDIF} external 'ACBr32.dll'; 

Function ECF_AbreCupom(const ecfHandle: pointer; const CPF_CNPJ, Nome, Endereco : pChar) : Integer; {$IFDEF STDCALL} stdcall; {$ENDIF} {$IFDEF CDECL} cdecl; {$ENDIF} external 'ACBr32.dll'; 

Function ECF_CancelaCupom(const ecfHandle: pointer) : Integer ; {$IFDEF STDCALL} stdcall; {$ENDIF} {$IFDEF CDECL} cdecl; {$ENDIF} external 'ACBr32.dll'; 


implementation 


//*Modelos de ECF 

const 

ECF_Nenhum = 0; 

ECF_NaoFiscal = 1; 

ECF_Bematech = 2; 

ECF_Sweda = 3; 

ECF_Daruma = 4; 

ECF_Schalter = 5; 

ECF_Mecaf = 6; 

ECF_Yanco = 7; 

ECF_DataRegis = 8; 

ECF_Urano = 9; 

ECF_ICash = 10; 

ECF_Quattro = 11; 

ECF_FiscNET = 12; 

ECF_Epson = 13; 

ECF_NCR = 14; 

ECF_SwedaSTX = 15; 


//*ESTADOS DO ECF 

ESTADO_NaoInicializada = 0; 

ESTADO_Desconhecido = 1; 

ESTADO_Livre = 2; 

ESTADO_Venda = 3; 

ESTADO_Pagamento = 4; 

ESTADO_Relatorio = 5; 

ESTADO_Bloqueada = 6; 

ESTADO_RequerZ = 7; 

ESTADO_RequerX = 8; 

ESTADO_NaoFiscal = 9; 


{$R *.dfm} 


procedure TForm1.Button1Click(Sender: TObject); 

var 

ihandle : ^integer; 

i: integer; 

begin 

ECF_Create(@ihandle); 

ECF_SetPorta(ihandle,PChar('COM1')); //AQUI DÁ UM ERRO DE ACCESS VIOLATION 

ECF_SetModelo(ihandle,ECF_Daruma); 

i:= ECF_Ativar(ihandle); 

showmessage(inttostr(i)); //AQUI PEGO O RETORNO DA FUNÇÃO PARA VER SE ESTÁ ATIVANDO 

end; 

Alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

usa esse exemplo


unit UnitDeclaracao;


interface


{$IFDEF MSWINDOWS}

function DefineModelo(ModeloStr, Porta : String ; Timeout : Integer ): Boolean; stdcall; External 'ACBrECFDLL.DLL';

function IdentificaConsumidor( CPF_CNPJ : String; Nome : String = ''; Endereco : String = '') : Integer ; stdcall;  External 'ACBrECFDLL.DLL';

Function AbreCupom( CPF_CNPJ : String = ''; Nome : String = '';

                    Endereco : String = '') : Integer ; stdcall; External 'ACBrECFDLL.DLL';

Function VendeItem( Codigo, Descricao : String; AliquotaICMS : String;

                    Qtd : Double ; ValorUnitario : Double; DescontoPorc : Double = 0;

                    Unidade : String = ''; TipoDescontoAcrescimo : String = '%') : Integer ; stdcall; External 'ACBrECFDLL.DLL';

Function SubtotalizaCupom( DescontoAcrescimo : Double = 0;

                             MensagemRodape : String = '') : Integer ; stdcall ; External 'ACBrECFDLL.DLL';

Function EfetuaPagamento( CodFormaPagto : String; Valor : Double;

                           Observacao : String = ''; ImprimeVinculado : Boolean = false) : Integer ; stdcall ; External 'ACBrECFDLL.DLL';

Function FechaCupom( Observacao : String = '') : Integer ; stdcall ; External 'ACBrECFDLL.DLL';

Function LeituraX : Integer ; stdcall ;  External 'ACBrECFDLL.DLL';

Function ReducaoZ( DataHora : TDateTime = 0 ) : Integer ; stdcall ; External 'ACBrECFDLL.DLL';

Function CancelaCupom  : Integer ; stdcall ;  External 'ACBrECFDLL.DLL';

Function CancelaItemVendido( NumItem : Integer ) : Integer ; stdcall ;  External 'ACBrECFDLL.DLL';

{$ENDIF}


{$IFDEF LINUX}

function DefineModelo(ModeloStr, Porta : String ; Timeout : Integer ): Boolean; cdecl; External 'libACBrECFDLL.so';

function IdentificaConsumidor( CPF_CNPJ : String; Nome : String = ''; Endereco : String = '') : Integer ; cdecl;  External 'libACBrECFDLL.so';

Function AbreCupom( CPF_CNPJ : String = ''; Nome : String = '';

                    Endereco : String = '') : Integer ; cdecl; External 'libACBrECFDLL.so';

Function VendeItem( Codigo, Descricao : String; AliquotaICMS : String;

                    Qtd : Double ; ValorUnitario : Double; DescontoPorc : Double = 0;

                    Unidade : String = ''; TipoDescontoAcrescimo : String = '%') : Integer ; cdecl; External 'libACBrECFDLL.so';

Function SubtotalizaCupom( DescontoAcrescimo : Double = 0;

                             MensagemRodape : String = '') : Integer ; cdecl ; External 'libACBrECFDLL.so';

Function EfetuaPagamento( CodFormaPagto : String; Valor : Double;

                           Observacao : String = ''; ImprimeVinculado : Boolean = false) : Integer ; cdecl ; External 'libACBrECFDLL.so';

Function FechaCupom( Observacao : String = '') : Integer ; cdecl ; External 'libACBrECFDLL.so';

Function LeituraX : Integer ; cdecl ;  External 'libACBrECFDLL.so';

Function ReducaoZ( DataHora : TDateTime = 0 ) : Integer ; cdecl ; External 'libACBrECFDLL.so';

Function CancelaCupom  : Integer ; cdecl ;  External 'libACBrECFDLL.so';

Function CancelaItemVendido( NumItem : Integer ) : Integer ; cdecl ;  External 'libACBrECFDLL.so';

{$ENDIF}


implementation


end.


http://www.rdwtecnologia.com.br/

Rodnei Hernandes Lino

Um pouco ce conhecimento é uma coisa perigosa.

Então é muito. (-Albert Einstein)

Guaíra-SP

Link para o comentário
Compartilhar em outros sites

Como eu faria isso? se eu tento alterar a dll (ACBrECFDLL.dll), na hora de compilar, dá o erro: "Record, object or class type required"

Esse erro dá na seguinte linha da unit ACBrEAD:

Procedure TACBrEAD.CalcularModuloeExpoente( var Modulo, Expoente : AnsiString );

Var

  Bio : pBIO;

  Ver : String ;

begin

  Ver := OpenSSL_Version;

  if pos('1.0',Ver) > 0 then

     raise Exception.Create( ACBrStr('Método CalcularModuloeExpoente ainda não é '+

                                     'compatível com OpenSSL 1.0.0 ou superior'));


  LerChavePrivada();


  Modulo   := '';

  Expoente := '';

  Bio := CriarMemBIO;

  try

    BN_print( Bio , fsKey.pkey.rsa.e); //AQUI DÁ O ERRO, COMO SE ELE NÃO RECONHECESSE ESSE "e" NO FINAL.  

    Modulo := BioToStr( Bio );


    BIO_reset( Bio );

    BN_print( Bio , fsKey.pkey.rsa.d);

    Expoente := BioToStr( Bio );

  finally

    LiberarBIO( Bio ) ;

    LiberarChave;

  end ;

end ;

Link para o comentário
Compartilhar em outros sites

Pessoal, há dois problemas básicos aí:

1. O projeto ACBrECFDLL.dll não é a mesma coisa que o ACBr32.dll.

O ACBr32.dll fica em "Projetos\ACBr32_DLL" e o ACBrDLL em "Projetos\ACBrDLL"

Assim como o ACBr32.dll, este outro projeto é também uma tentativa de exportar o componente ECF do ACBr para uma DLL, mas feito de forma diferente do ACBr32.dll; Alguma coisa é semelhante, mas não há compatibilidade nem suporte pelo ACBr32.dll

2. O projeto ACBr32.dll foi feito para o uso em QUALQUER linguagem de programação. Inclusive em Delphi.

Em Delphi, concordamos que o natural é utilizar os componentes ACBr, mas não há impedimentos em utilizar a ACBr32.dll.

Neste caso, não temos um exemplo feito em Delphi, o programador pode basear-se nos exemplos feitos em C ou em FoxPro que utiliza a DLL diretamente, basta seguir as declarações da DLL no código em Delphi.

O problema nesse caso, não é que não exista a função para desativar a impressora, você só não declarou as funções em seu código Delphi, por isso não funciona.

***

Com o aumento da audiência do ACBr32.dll, eu estou escrevendo um artigo sobre o trabalho desenvolvido até agora, e acredito que será útil para quem quiser contribuir com o desenvolvimento deste projeto, e talvez mais útil ainda para quem quiser entender o porquê das "doideiras" desse projeto.

Abs,

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link para o comentário
Compartilhar em outros sites

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