Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa noite,

Desenvolvi um exemplo para o ACBrConsultaCNPJ para FMX, baseado no exemplo já existente para Windows.

Roda perfeitamente em Windows 32 e Android.

No Windows 32 mostra o Captcha e traz normalmente os dados do CNPJ consultado. Portanto, está perfeitamente OK.

Entretanto, quando compilo e instalo no Android, mostra o Captcha normalmente, mas na hora de consultar o CNPJ não traz os dados, dando um erro que não foi possível retornar os dados.

Na verdade, pelo debug, verifiquei que existe alguma coisa a mais para fazer nas units ACBrSocket e ACBrUtil.

Quando chama a função StripHtml, parece que o retorno é cortado logo depois do <head> do html de resposta. Este problema não ocorre quando compilado para Windows 32.

Consequência disto, a parte onde o ACBrConsultaCNPJ lê as tags de CNPJ, Razão Social ,etc no retorno não existem porque esta função StripHtml corta o retorno conforme descrevi.

Gostaria de passar o exemplo funcionando perfeitamente para você colocar no trunk.

Entretanto, estou com este problema.

Eu não sei quem é o Consultor dentro do ACBr que poderia me ajudar nessa...

Caso queira, posso te passar o exemplo.

 

Nelson Santos

Screenshot_20201015-193505.png

  • Obrigado 1

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

Postado

@Daniel Simoes

Se ajudar, será que a declaração do parâmetro da função StripHtml, sendo AnsiString não está causando isto ? Será que o compilador Android não seria melhor PAnsiChar, ou WideString, ou até mesmo somente string ?

O problema é que a declaração AnsiString está em vários locais como ACBr Socket e ACBrUtil...

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

  • Fundadores
Postado

Ainda não investiguei o problema... mas provavelmente é isso mesmo... Briga de String vs AnsiString...

Precisamos seguir todo o caminho e atribuições, para garantir que o mesmo tipo é sempre usado, ou convertido adequadamente...

 

AnsiString sempre foi muito usado no Pascal como um Buffer para dados binários...
http://www.ararat.cz/synapse/doku.php/public:howto:binarystring

Então alguns "gênios" da Embarcadero, resolveram acabar com a AnsiString no compilador NEXTGEN (que é usado no Delphi Android, até a versão 10.3)

Finalmente reconheceram o Erro, e mataram a porcaria do NEXTGEN... veja esses artigos...

https://blog.marcocantu.com/blog/strings_immutability_cow_ansistrings.html

https://blog.synopse.info/?post/2013/05/11/Delphi-XE4-NextGen-compiler-is-disapointing

Essa mudança infeliz, custou muito para a linguagem Delphi... centenas de bibliotecas não puderam ser migradas, devido a essas mudanças não desejadas e infelizes... e por isso que o Delphi não se tornou uma ferramenta de sucesso no mobile..

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

O que eu acho é que os equipamentos mobile usam padrão do Linux e que isto é UTF8.

Quem trabalha com Java, e qualquer variante, como JAVAME, ANDROID JAVA, BLACKBERRY JAVA, e todos os demais, tem uma preocupação muito grande quando pegamos um arquivo codificado em ASCII/ANSI pois temos que converter para UTF8 para não ficar aparecendo aqueles caracteres "doidos" na tela do editor. Quando trabalhamos com webservices feitos em alguma linguagem Windows, como ASP.NET, isto também acontece com os dados retornados.

O compilador Nexgen deve ter herdado ou foi obrigado a herdar está característica que é do Kernel dos Mobiles. 

Posso estar completamente errado, mas é o que penso agora.

Sendo assim, como falei em meu primeiro post, declarações AnsiString são usadas em vários lugares no ACBr, principalmente nas units ACBrUtil e ACBrSocket, usadas por todos os outros componentes. O refactoring é grande. 

 

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

  • Fundadores
Postado

Não faz sentido...

Remover todos os AnsiStrings do ACBr, e projetos que ele usa, levaria meses de trabalho... estou fora... se isso realmente for necessário, prefiro abandonar o Delphi...

O 10.4 trouxe o bom e velho Pascal de volta e enterrou de vez o infeliz do compilador NEXTGEN 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado
4 horas atrás, Nelson Santos disse:

Sendo assim, como falei em meu primeiro post, declarações AnsiString são usadas em vários lugares no ACBr, principalmente nas units ACBrUtil e ACBrSocket, usadas por todos os outros componentes. O refactoring é grande. 

Usamos como um String Binário, para Buffer de dados... mas nunca para exibição de Strings para o usuário...

Mas como eu disse antes.. não penso em fazer refactoring sobre isso... AnsiStrings são uma ótima forma de criar aplicações que manipulam buffers binários, de forma otimizada, e livres de memory leak

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

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