Jump to content

Assista tectoy.png

Criando DLL com o ACBrECF


  • Este tópico foi criado há 3741 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.