Ir para conteúdo
  • Cadastre-se

dev botao

Criando DLL com o ACBrECF


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

Recommended Posts

Olá pessoal,

Estou criando uma dll com as funções do componente ACBrECF para utilizar em meu programa de automação comercial. A idéia é substituir todas as dll´s das impressoras por essa única dll que controlaria tudo.

Acontece que, quando eu vou passar o modelo da impressora dá um erro de access violation. Depois de muito pesquisar, descobri que o componente deve estar desativado para passar o modelo, mas, no momento que eu instancio ele, ele já começa ativado e eu não consigo desativar, pois dá access violation de novo.

Abaixo vai o código da minha dll:

function AutoECF_FI_Ativar( Modelo, Porta, TimeOut, Intervalo, Buffer: String ): Integer; StdCall;

var

ACBrECF1: TACBrECF;

begin

if ACBrECF1.Ativo then ACBrECF1.Desativar; //aqui dá o erro de access violation

ACBrECF1.Modelo := TACBrECFModelo( 4 ); //impressora Daruma

ACBrECF1.Porta := 'COM1';

ACBrECF1.Ativar ;

end;

Alguem sabe como resolver isso? É super mega urgente.

Obrigado.

Link para o comentário
Compartilhar em outros sites

Amigo, você esqueceu de criar o componente:

function AutoECF_FI_Ativar( Modelo, Porta, TimeOut, Intervalo, Buffer: String ): Integer; StdCall;

var

ACBrECF1: TACBrECF;

begin


//Faltou esta linha

ACBrECF1 := TACBrECF.Create();




if ACBrECF1.Ativo then ACBrECF1.Desativar; //aqui dá o erro de access violation


ACBrECF1.Modelo := TACBrECFModelo( 4 ); //impressora Daruma

ACBrECF1.Porta := 'COM1';

ACBrECF1.Ativar ;

end;

Obs: Não testei o código.

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Link para o comentário
Compartilhar em outros sites

Olá regys.silveira,

Acho que é realmente isso que eu estava precisando!

Essa ACBr32_DLL tem alguma documentação que informa qual o retorno de cada função? Para que eu possa dar uma estudada e saber como tratar esses retornos? Se retorna inteiro, string, etc... se existem parâmetros que devem ser passados para cada função, como deve ser declarada a função no projeto, enfim... Será que tem os fontes dessa dll?

Obrigado.

Link para o comentário
Compartilhar em outros sites

regys,

Obrigado novamente. Acho que encontrei o que estava precisando. Gostaria de saber se existe algum projetinho de exemplo, mostrando como usar essas funções? Olhei o código fonte e ainda estou com algumas dúvidas com os parâmetros das mesmas.

Pode ser um exemplo simples, de como ativar a impressora, abrir um cupom e fazer uma venda.

Link para o comentário
Compartilhar em outros sites

regys,

Não entendi a constante ecfHandle que aparece em todas as funções. O que devo passar para ela? Nunca trabalhei com ponteiros no Delphi, talvez por isso esteja com dificuldade de entender. Desculpe se pareço meio leigo nesse assunto, mas é que estou precisando muito utilizar essa dll no meu projeto, assim posso controlar qualquer ECF de qualquer modelo, sem precisar de tantas dll´s.

Obrigado novamente,

Att,

Daniel

Link para o comentário
Compartilhar em outros sites

  • Consultores

Olá Daniel,

Acho que está indo pro lado errado. Se você está usando o Delphi, a melhor opção seria usar os componentes. Colocar os componentes em dll's é aconselhável para quem usa outra linguagem.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Opa, ai é diferente, :)

Use o ACBrInstall, ele vai instalar nos dois delphis e funcionar corretamente, eu por exemplo tenho 3 delphis aqui na minha maquina (d7, d201 e DXE2) mais o lazarus, tudo funcionando 100%.

obtenha o ACBrInstall em: http://sourceforge.net/projects/acbr/files/

Ou se quiser fazer a mão siga o post do Isaque:

http://isaquesp.blogspot.com/2011/09/va ... s-sem.html

Qualquer uma das formas vai funcionar corretamente e sem problemas.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

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

  • Consultores

Se não conseguir com as dicas do regys, poste aí que a gente procura um outro jeito.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Sim, baixei o ACBrInstall, mas ele não instala no Delphi 6. No Delphi 2010 eu consegui instalar corretamente, mas o projeto que eu quero usar o ACBr é feito em Delphi 6, e não tenho tempo suficientemente grande para migrar todo ele para o Delphi 2010. Por isso tenho que usar a dll, entendeu?

Seria o meio mais rápido para controlar as ECF´s do meu sistema?

Link para o comentário
Compartilhar em outros sites

  • Consultores

Não. Continua sendo melhor instalar o componente no Delphi 6.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

O path do Delphi 6 ficou assim:

C:\Program Files\Borland\Delphi6\Bin;C:\Inprise\vbroker\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:

O path do delphi 2010 ficou assim:

C:\Program Files\Embarcadero\RAD Studio\7.0\bin;C:\Users\Public\Documents\RAD Studio\7.0\Bpl;C:\Inprise\vbroker\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Documents and Settings\All Users\Documentos\RAD Studio\7.0\Bpl

Link para o comentário
Compartilhar em outros sites

  • Consultores

Procure onde está o arquivo DJCL60.bpl no seu computador e adicione o caminho ao path do Delphi 6.

Se isso não resolver então acho que a dica do Daniel de usar um arquivo .bat talvez seja necessário para o seu Delphi 6.

Eu mesmo dei essa dica do enviroment variables no fórum antigo, mas existe alguns casos específicos em que ela não funciona.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Eu não consegui instalar o ACBr no Delphi 6 de jeito nenhum. Por isso necessito utilizar a dll, mesmo o meu projeto sendo em delphi 6. A chamada das funções da dll eu faço do mesmo jeito que faria de qualquer outra dll, mas na hora de compilar, dá o erro: "Undeclared identifier PECFHandle"

Fiz uma aplicação de teste bem simples com 3 botoes: um para ativar a impressora, outro para abrir o cupom, e um terceiro para cancelar o cupom. Abaixo vai o código:

************************************************************************************************

unit Unit1;

interface

uses

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

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

handle:^integer;

end;

var

Form1: TForm1;

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

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

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

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

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

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

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

i : integer;

begin

i:= ECF_SetPorta(handle,'COM5');

i:= ECF_SetModelo(handle,4);

i:= ECF_Ativar(handle);

end;

procedure TForm1.Button2Click(Sender: TObject);

var

i: integer;

begin

i := ECF_AbreCupom(handle,'','','');

end;

procedure TForm1.Button3Click(Sender: TObject);

var i : integer;

begin

// aqui chamaria a função cancela cupom

end;

end.

*******************************************************************************************

Link para o comentário
Compartilhar em outros sites

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