Jump to content

Compre o Delphi
Com até 30% de desconto
e parcelado em até 12x sem juros

Saiba Mais

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

naugustijr

Problemas Na Migração Do Acbrx Para Acbrframework - Memoparams

Recommended Posts

Pessoal,

 

não preciso repetir que tanto o projeto ACBr como o ACBrFramework são fantásticos, mas estou encontrando alguns problemas em usá-lo no VB6.

 

Tenho um aplicativo funcional que utiliza o ACBrX do pessoal do EasyTef. O pessoal sempre me deu um bom suporte mas depois que vocês lançaram o ACBrFramework eles

não me responderam mais. Acho que perderam o interesse pelo produto. 

Dessa forma, estou fazendo uma avaliação para trocar o ACBrX pelo ACBrFramework. Ja baixei o projeto, compilei e consigo fazê-lo funcionar PARCIALMENTE.

 

------------

 

Para fazê-lo funcionar tive que fazer algumas alterações no aplicativo de exemplo: 

 

Trocar:

Private Sub ACBrECF_OnBobinaAdicionaLinhas(ByVal e As ACBrFramework_Net.BobinaEventArgs)

Por:

Private Sub ACBrECF_OnBobinaAdicionaLinhas(ByVal e As ACBrFramework_Net.BobinaAdicionaLinhasEventArgs)

--------------

 

Percebi que várias funções que eu usava estão marcadas como PENDENTES:

Exemplo:

 

Private Sub mniAchaAliquotaValor_Click()
'PENDENTE
'Dim Aliquota As Aliquota
'Dim Valor As String
'
'    Call ACBrECF.LerTotaisAliquota


'    Set Aliquota = ACBrECF.AchaICMSAliquota(Valor, "") 'função que usava em minha aplicação
 
Neste caso específico não preciso mais da função visto que a função de programação de aliquota não cria aliquotas já existentes.
Mando programar a aliquota e se ela ja existir nada acontecerá.
 
Não entendi (não encontrei na documentação) porque algumas das propriedades do ACBrECF não existem mais (ou, pelo menos, não funcionam no ACBRFramework).
Propriedades inexistentes:
  ReTentar
  BloqueiaMouseTeclado 
  ExibeMensagem
  MsgAguarde
  MsgTrabalhando
 
Objetos Inexistentes:
  ACBrRFD
 
Metodos Inexistentes:
  ACBrECF.CarregarMemoParams
 
 
 
 
Algumas das mudanças (incluo em mudanças as pendencias e melhorias em algumas funções) não tiveram grande impacto mas tem uma
que está me atrapalhando muito (por enquanto, é a única).
 
No meu aplicativo mostro na tela o retorno do processamento dos comandos em um componente do tipo textbox, utilizando a propriedade
Linhas do evento ACBrECF_OnBobinaAdicionaLinhas. Para que saida seja satisfatoria o conteudo da propriedade Linhas deve estar em
modo texto (HTML=0, na propriedade MemoParams) e nao HTML (HTML=1, na propriedade MemoParams). Com o ACBrX eu carregava
esta informação de um arquivo .INI e atualizava a propriedade MemoParams. Agora não consigo fazer o mesmo com o ACBrFramework
e o retorno da propriedade Linhas está cheio de tags HTML. Eu preciso realmente resolver este problema. Irei fazer a migração do 
aplicativo para C# (tenho outros ja rodando) mas não tenho tempo para fazer isso agora.
 
Tecnicamente falando.
 
O objeto ACBrECF tem uma propriedade que é um array de string (Propriedade MemoParams) e que não ser alterada mesmo tendo
o método SET no ACBrFramework.Net.dll. Ela pode ser lida (GET) mas não pode ser alterada. A mensagem que retorna é a seguinte:
 
Function or interface marked as restricted, or the function uses an Automation Type not supported in Visual Basic.
 
Acredito que o problema não seja "restricted" visto que a propriedade é publica e outras propriedades da mesma classe são acessadas
e alteradas normalmente. O problema deve ser o "Automation Type not supported in Visual Basic". 
Vocês já tentaram alterar a propriedade MemoParams dentro do VB6?

 

Façam este teste no Aplicativo ECFTeste.vbp. Substituam o inicio do codigo da procedure CarregarACBrECF por

 

Private Sub CarregarACBrECF()
    Set ACBrECF = New ACBrECF
    
    Dim memoparams As Variant
    
    'Atribuo tranquilamente sem erros
    memoparams = ACBrECF.memoparams
    
    'Altero a variavel local
    memoparams(1) = "LIN000=<center><b>RARARARRARAR</b></center>"
    memoparams(22) = "HTML=0"
    
    'Trecho de codigo que da erro de compilação
    ACBrECF.memoparams = memoparams
    
    
    'Utilizar o AAC
    'Set ACBrAAC = New ACBrAAC
    'ACBrAAC.NomeArquivoAuxiliar = "C:\teste.txt"
    'Set ACBrECF.AAC = ACBrAAC

 

Desde já agradeço muito a atenção.

Ficarei feliz se puder ajudar no projeto também.

 

 

 

 

Share this post


Link to post
Share on other sites

Pessoal,

 

como ninguém respondeu e precisava de uma solução,

   recompilei o ACBRFramework32.dll no Lazarus, (com a alteração do parâmetro HTML=1 para HTML=0)

   compilei novamente o ACBrFramework.Net.dll (ACBrFramework.Net.tlb) e usei

   no aplicativo feito em Visual Basic 6.0.

   Funcionou da forma que eu precisava.

 

O problema é que os dados da empresa que ficam na propriedade MemoParams são genéricos e se quiser uma 

solução alternativa tenho que gerar um arquivo ACBRFramework32.dll (e descendentes) para cada cliente.

 

Preciso resolver a questão da atualização (em tempo de execução) do campo MemoParams.

 

Pensei em algumas alternativas:

 

1) Gerar um arquivo ACBRFramework32.dll para cada cliente (dito acima)

 

2) Criar uma propriedade com o local do arquivo ACBrMemoParams.ini (que no ACBrECF.pas é acbrecfmemo.ini, e não consegui ler com este nome tambem)

e criar um método (procedure) e encapsulá-lo no ACBrFramework para carregar o arquivo;

 

3) Encapsular a procedure MemoLeParams no ACBrFramework. É possível, viável?

 

4) Tentar alterar o código fonte do ACBrFramework para que a propriedade MemoParams aceite ser escrita, assumindo que atualmente ela não está funcionando corretamente.

Documentos associados:

 

http://blogs.msdn.com/b/aszego/archive/2009/10/12/visual-basic-6-and-net-com-interop.aspx

 
 
Se alguém puder ajudar, agradeço muito.
 
 

.  

Share this post


Link to post
Share on other sites

Me desculpem. Esqueci de perguntar.

 

No tópico  a seguinte informação: O próprio componente a extrai numa pasta temporária e a utiliza sem que o usuário saiba.

 

Como o arquivo ACBrFramework32.dll faz/pode fazer manipulações de arquivos (deve utilizar o path da aplicação ou de onde se encontra) e o mesmo é extraído em uma pasta temporária será 

que os arquivos que ele tenta ler (exemplo: acbrecfmemo.ini) nunca serão encontrados pois não estão nesta pasta temporária?

 

 

 

Criamos uma DLL nativa a partir do ACBr, essa ACBrFramework32.dll que você viu.

Como essa DLL é muito complexa para ser utilizada diretamente, um modelo de objetos semelhante ao ACBr original é criado tanto em C# quando em Java (chamamos isso de wrapper).

 

A partir desse wrapper você manipula a DLL seja em C# ou em Java da mesma forma que um programador Delphi usa o ACBr, ou seja, você pode usar um exemplo escrito em Delphi ou fazer uma pergunta em qualquer área do fórum que o comportamento e modo de usar será exatamente o mesmo em qualquer linguagem.

 

Por isso não há razão para usar a DLL nativa ou as classes de interop diretamente. Elas são apenas para fins de desenvolvimento.

A DLL é embutida no ACBrFramework.Net, de forma que você não precisa copiá-la para nenhum lugar. O próprio componente a extrai numa pasta temporária e a utiliza sem que o usuário saiba.

Caso queira estudar o fonte, está incluído no SVN do ACBrFramework, é o projeto feito em Lazarus.

 

Share this post


Link to post
Share on other sites

Caro Josevaldo,

 

a sua resposta não consta aqui no Forum. 

Se você não se solidarizar com minhas duvidas explicitamente temos menos chance de sermos correspondidos.

 

Se tem uma dúvida semelhante faça-a constar aqui tambem.

 

Eu também tenho interesse em ajudar no projeto mas preciso de algo mais mastigado visto que todos temos pouco tempo disponivel.

Share this post


Link to post
Share on other sites

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...