Jump to content

diadoacbr

Exemplo de utilização ACBr32.dll


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

Recommended Posts

  • Consultores

Por favor tente não duplicar seus posts

Já vi em outros lugares ele, calma que alguém vai ler e se puder vai te ajudar

não adianta sair colocando em todo o fórum

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

Alô Daniel,

Vi que você tem uma dúvida quanto ao uso do ACBr32.dll utilizando Delphi.

O problema aí, não é que a DLL não funcione com o Delphi, mas sim que com o Delphi, o uso dos componentes nativos é a melhor saída.

Sugiro que você tente resolver o problema da instalação dos componentes e passe a usá-los.

Para usar a DLL diretamente em Delphi, seria necessário seguir algum exemplo feito em C ou em FoxPro que utiliza a DLL diretamente.

Não temos a intenção de suportar o uso direto em Delphi.

Caso tenha alguma dúvida, fique a vontade.

Abs,

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

  • 3 months later...

Rafael então se eu quizer usar o ACBr32.dll com Harbour 3.00 vai ser compativel.?

Sim, a DLL é compatível com qualquer linguagem de programação.

Dê uma olhada no exemplo que temos em FoxPro (na pasta Projetos\ACBr32_DLL\ACBr_FoxPro) que lá tem a declaração das funções da DLL e suas chamadas, acho que esse exemplo em FoxPro vai servir pro Harbour.

Qualquer dúvida quanto a declaração das funções e uso da DLL, fique a vontade.

Abs,

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

Rafael obrigado por sua atençâo.

Mais queria so entender, no caso da darumaframework.dll eu carrego e nao preciso usar declaracoes, no caso da acbr32.dll eu teria que fazer primeiro as declaracoes das funções?

Oi lucimauro,

A darumaframework.dll é uma DLL nativa assim como o ACBr32.dll. A forma de uso das duas segue o mesmo princípio.

Existem duas formas de fazer o link com uma DLL:

Uma é usando as declarações estáticas para o compilador entender que essas funções devem ser chamadas de uma DLL externa:

DECLARE INTEGER ECF_Ativar IN ACBr32.DLL INTEGER iECFHandle

E outra é utilizando vínculo dinâmico, que deve ser o seu caso:
NDLL:=Dllload("ACBr32.dll")

nRetorno:=DLLCALL(NDLL,32,"ECF_Ativar ", iECFHandle)

As funções do Dllload e DllCall presentes no Clipper/FoxPro/Harbour, fazem o carregamento da DLL e a chamada da função.

Eu particularmente prefiro as declarações estáticas, pois não é preciso repetir a string com o nome da função e da dll em cada chamada.

Se não for bem isso que você queria saber, poste um trecho do seu código ao chamar alguma função do darumaframework.dll pra eu entender, blz!

Abs.

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

So nao entendi a variavel iECFHandle como deve criar é um ponteiro.?

a variável iECFHandle é um integer, e representa um ponteiro para o ACBr32.DLL localizar o componente ACBr.

o componente possui uma função ECF_Create onde o valor do handle é retornado por referência

iHandle = 0

ret = ECF_Create(@iHandle)

a partir do ECF_Cretate, todas as funções precisam desse parâmetro para funcionar.

no fim do uso, a função ECF_Destroy deverá ser chamada para que o componente possa ser destruído e liberado da memória.

Dá uma olhada no exemplo em FoxPro, lá tem as declarações e a forma de uso. Eu não entendo muito dessa linguagem, esse exemplo em FoxPro foi contribuição de um colega. Mas posso te ajudar no que for possível quanto ao uso da DLL.

Se você conseguir fazer um código de exemplo em Harbour, poste aqui que eu posso disponibilizá-lo no SVN.

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

Rafael, ja consegui me comunicar com a ECF pelo ACBR32.DLL, agora tenho que ver os comandos por aquele arquivo de declaracoes para aprender as sintaxe ou tem outro que posso ver todos os comandos com seu devidos parametros.?

Oi lucimauro, que bom que vc teve sucesso.

Cara, o único arquivo que temos contendo todas as declarações é o .PAS do Delphi, que implementa as funções, e o .CS do C# que faz a chamada a 100% das funções.

Os demais exemplos, estão incompletos, alguns com muitas chamadas implementadas, outros nem tanto.

Posta pra mim um trecho do seu código com as declarações, eu vou fazer uma lista de todas as funções na mesma sintaxe;

Depois você testa e vê se vai funcionar.

Abs,

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

ok então, eu achei que você ia implementar usando o DLLLoad e DLLCall.

Nesse .prg tem todas as chamadas pra operação do ECF, eu vou atualiza-lo pra constar as chamadas mais recentemente implementadas (acho que foi Velocidade e paridade da porta COM e DadosReduçãoZ ... tenho que olhar)

Assim que pronto eu posto aqui

Abs,

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

  • Membros Pro

Rafael na verdade eu estou usando dllload e dllcall certo.

O que eu perguntei a voce era a sintaxe das funçoes, se no arquivo acbr32dll.prg estão todas a funções como seu devidos parametros.

Nao sei se fui claro.

Agora voce disse que vai ver a atualização das declarações eu agradeço.

Link to comment
Share on other sites

Rafael na verdade eu estou usando dllload e dllcall certo.

O que eu perguntei a voce era a sintaxe das funçoes, se no arquivo acbr32dll.prg estão todas a funções como seu devidos parametros.

Nao sei se fui claro.

Agora voce disse que vai ver a atualização das declarações eu agradeço.

Desculpe, falha de comunicação.

(...)

Nesse arquivo .prg não existem todas as funções atuais, acredito que continha todas na época em que ele foi implementado, mas agora com certeza há outras funções novas.

Eu posso atualizá-lo com todas as funções atuais do ACBR32.DLL sim.

O que eu quiz dizer é que, se vou criar as declarações, já não seria melhor colocá-las na sintaxe do DLLLoad e DLLCall?

Por isso, se você tiver um exemplo de código, posta ele aí que eu sigo na mesma sintaxe.

Abs

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

  • Membros Pro

Beleza Rafael.

A sintaxe é assim :

public nlib32:=dllload("ACBR32.DLL")

iECFHandle = 0

retorno_ecf:=DllCall( nLib32, 32, "ECF_Create",@iECFHandle)

retorno_porta:=DllCall( nLib32, 32, "ECF_SetPorta",iECFHandle,"COM5")

retorno_modelo:=DllCall( nLib32, 32, "ECF_SetModelo",iECFHandle,2)

retorno_Ativar:=DllCall( nLib32, 32, "ECF_Ativar",iECFhandle)

num_cupom:=space(6)

retorno_ecf:=DllCall( nLib32, 32, "ECF_GetNumCupom",iECFhandle,@num_cupom,6)

|Deu para voce entender?

Link to comment
Share on other sites

oi, tenho sim.

Estamos mexendo no ECF, e o arquivo está ainda meio bagunçado.

Na verdade estamos organizando o arquivo de forma a facilitar atualizar as declarações de quem utilizar a DLL. Temos que pensar em poder atualizar de forma fácil as declarações de quem usa dBase, Visual Basic, C/C++, Java e C#. Atualmente apenas o C# está 100% atualizado.

Acho que essa semana fechamos isso, eu posto aqui.

Abs

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

  • 1 month later...

Alô! lucimauro

Obrigado por sua atenção.

Obrigado por sua paciência!!!

Cara, como vc deve saber, o ACBr.Dll mudou pra ACBrFramework. Estamos trabalhando num projeto chamado DefExporter pra ele, esse DefExporter vai exportar todas as declarações da DLL pra C/C++, VB6 e xBase (Harbour, Clipper, FoxPro, etc) .... Isso vai nos poupar do trabalho de ficar atualizando as declarações toda vez que algo novo é implementado.

Pra C/C++ e VB6 tá funcionando que é uma maravilha, mas pra xBase/Harbour tá difícil.

Por isso eu venho aqui pedir a ajuda da galera que usa e conhece essa linguagem:

1 - Em algumas funções, precisamos passar um estrutura de dados (como uma classe com alguns campos, tipo uma Aliquota do ECF por exemplo).

Como é que vocês fazem isso em xBase/Harbour?

Achei esse doc, mas acho que deve ter jeito mais fácil:

http://msdn.microsoft.com/en-us/library ... h5(v=vs.80).aspx

2 - Idem ao 1, algumas funções passam e recebem Arrays ... como se faz isso?

3 - Tem alguma diferença ou incompatibilidade entre a forma de usar em Harbour e em xBase ?

Agradeço toda ajuda e palpites!

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

Mais a questao para a chamado em harbour mudou alguma coiusa..?

Não mudou, continua do mesmo jeito.

Mas novas funções foram acrescentadas. As funções que recebem Inteiros, Strings, etc são fáceis de resolver.

O problema são as funções que recebem estruturas de dados contendo vários campos, arrays, etc. Essas eu não sei qual a forma correta de chamar em Harbour/xBase.

Veja alguns exemplos abaixo:

A função ECF_GetPorta

Function ECF_GetPorta(const ecfHandle: PECFHandle; Buffer : pChar; const BufferLen : Integer) : Integer

Pode ser facilmente chamada em Harbour/xBase assim:
NDLL:=Dllload("ACBrFramework32.dll")

nRetorno:=DLLCALL(NDLL,32,"ECF_GetPorta", iECFHandle, @porta)

Agora, uma função mais complexa, como ECF_GetComprovanteNaoFiscal eu não sei como chamar no Harbour/xBase:
type TComprovanteNaoFiscalRec = record

    Indice            : array[0..3] of char;

    Descricao         : array[0..29] of char;

    PermiteVinculado  : Boolean;

    FormaPagamento    : array[0..3] of char;

    Total             : Double ;

    Contador          : Integer;

end;


Function ECF_GetComprovanteNaoFiscal(const ecfHandle: PECFHandle; var retComprovanteNaoFiscal : TComprovanteNaoFiscalRec; const index : Integer) : Integer

A dúvida que tenho é como vamos fazer para declarar e passar um tipo complexo como TComprovanteNaoFiscalRec no Harbour/xBase.

Nesse ponto é que preciso de ajuda dos especialistas nessa linguagem.

**********

Pensamos em criar métodos alternativos que retornam/recebem essas informações complexas como strings, aí no Harbour/xBase o programador deveria pegar a substring de cada campo.

Além dessa abordagem nos dar um bom trabalho de duplicar certas funções fazendo a transformação dos argumentos em strings, não sabemos se seria a forma mais fácil de se fazer esse trabalho em Harbour/xBase.

Dicas? Sugestões? Comentários?

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

  • 2 weeks later...

Ola amigos

Rafael usando o ACBR32.DLL, a comunicação será feita pela DLL do fabricante ou acesso direto como o ACBRMonitor, pergunto isso pois se for pela DLL do fabricante estou disposto a trabalhar no testes e te dar sugestoes para os retornos.

Fico no aguardo.

--

======================================================================

[]___

/ /\____ Jackson Douglas C. Brito

/_/\_//____/\ Engenheiro de Soluções

| || ||| ||| OnTop Sistemas / Wild Sistemas

| || |||__||| Boa Vista - RR (95)-8112-8570

======================================================================

Link to comment
Share on other sites

Ola amigos

Rafael usando o ACBR32.DLL, a comunicação será feita pela DLL do fabricante ou acesso direto como o ACBRMonitor, pergunto isso pois se for pela DLL do fabricante estou disposto a trabalhar no testes e te dar sugestoes para os retornos.

Fico no aguardo.

Oi Jackson, usando o ACBrFramework (agora nós mudamos de nome, não é mais ACBr32), o acesso é feito como nos componentes ACBr, ou seja, comunicação direta ao ECF, sem o ACBrMonitor e sem a DLL do fabricante também.

O nosso projeto tem crescido bastante, a já temos implementado outros componentes além do ECF, como o BAL, AAC, PAF, EAD, Sintegra, e outro ainda virão.

Mas todo esse crescimento deixou as outras linguagens que suportamos em grande defasagem, pois nos dedicamos principalmente ao .Net, e muitas vezes não sobra tempo de atualizar os exemplos.

Portanto, gostariamos SIM de toda a ajuda possível para podermos manter o projeto também para outras linguagens.

Leias os últimos posts desse tópico, e veja se você tem alguma sugestão.

Se tiver exemplos de código das chamadas da DLL em sua linguagem, podemos fazer um Export das chamadas já implementadas pra você testar.

Teremos muitos ajustes a fazer,

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

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

Link to comment
Share on other sites

  • Este tópico foi criado há 1636 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • 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.