Jump to content

dev botao

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

Recommended Posts

Posted

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.

 

 

 

 

Posted

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.
 
 

.  

Posted

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.

 

  • 3 weeks later...
Posted

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.

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