Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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.

 

 

 

 

Postado

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.
 
 

.  

Postado

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 semanas depois ...
Postado

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

The popup will be closed in 10 segundos...