Ir para conteúdo
  • Cadastre-se

dev botao

access violation quando vou ativar a impressora


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

Recommended Posts

Cara, esta é um boa pergunta, que também gostaria de saber a resposta!

 

E se eles corrigem o erro, vou tentar entender o que eles fazem, porque é somente remover FastMM/EurekaLog do meu projeto, que ele não roda mais.

 

Acredito que seja toda essa alteração que foi realizada no Delphi referente ao mapeamento de String/Unicode que possa ser a causa do problema, e como as alterações no ACBr, podem estar sendo feitas em versões bem mais recentes do Delphi, isso pode estar afetando as versões anteriores como no nosso caso.

 

Procurando encontrei dois post do blog do Andreano Lanusse que podem ajudar a explicar o quero dizer: 

 

http://www.andreanolanusse.com/pt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/

 

http://www.andreanolanusse.com/pt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/

 

Sobre os cast, os que vi na unit seriam casts de String para AnsiString ou AnsiString para String, e seguindo esse trecho do primeiro link, acredito que o problema possa estar relacionado a isso:

 

Resumo das mudanças para Unicode:

  • String mapeia UnicodeString e não mais AnsiString
  • Char agora mapeia WideChar (2 bytes e não 1 byte) e é um caractere UTF-16
  • PChar mapeia PWideChar
  • AnsiString mapeia o antigo tipo String.

 

Estamos pensando no que fazer para entender e resolver, de momento a única idéia que temos para resolver o nosso problema seria a que postei acima.

 

 

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Consultores

Cara, esta é um boa pergunta, que também gostaria de saber a resposta!

Então quando descobrir me conta. Acredito que vai na sua busca perceber que o gerenciador de memória do Delphi 6 no mínimo parcialmente culpado por isso.

 

E se eles corrigem o erro, vou tentar entender o que eles fazem, porque é somente remover FastMM/EurekaLog do meu projeto, que ele não roda mais.

O FastMM substitui o gerenciador de memória que é embutido em todas aplicações do Delphi. Ele é tão melhor do que o padrão que foi embutido no Delphi, se não me falha a memória, a partir da versão 2007. Em termos simples, é isso "o que ele faz".

 

Acredito que seja toda essa alteração que foi realizada no Delphi referente ao mapeamento de String/Unicode que possa ser a causa do problema, e como as alterações no ACBr, podem estar sendo feitas em versões bem mais recentes do Delphi, isso pode estar afetando as versões anteriores como no nosso caso.

 

Procurando encontrei dois post do blog do Andreano Lanusse que podem ajudar a explicar o quero dizer: 

 

http://www.andreanolanusse.com/pt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/

 

http://www.andreanolanusse.com/pt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/

 

Sobre os cast, os que vi na unit seriam casts de String para AnsiString ou AnsiString para String, e seguindo esse trecho do primeiro link, acredito que o problema possa estar relacionado a isso:

 

Você sabia que o Delphi 6 não é preparado para trabalhar com unicode? Quero dizer, que dentro do código dele String é igual a AnsiString? Que esses tipos fazem parte do compilador e nem estão ao menos declarados numa Unit?

Os posts do Andreano, até onde eu entendi, são para quem está programando com Delphi acima do 2007 ou migrando para alguma destas versões. Me corrija se eu estiver errado.

 

Estamos pensando no que fazer para entender e resolver, de momento a única idéia que temos para resolver o nosso problema seria a que postei acima.

Essa é a sua única ideia porque vocês estão desconsiderando usar o FastMM ou algum outro gerenciador de memória como solução para o problema. É sério.

A qualquer usuário do Delphi usando uma versão anterior ao 2007 que ainda não adiciona o FastMM no projeto eu aconselho a usar o FastMM. Se você não quer adicionar simplesmente por não querer, sem dar uma explicação, então, eu deixo de lado.

 

Não tenho tempo nem interesse de ficar discutindo algo que pra mim está tão claro e muito bem documentado na internet e na comunidade Delphi internacional. Se essa opção não funcionar ou tiver motivos válidos para não pô-la em prática, aí tudo bem.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

EMBarbosa, meu intuito aqui é tentar entender o que está acontecendo e acharmos uma solução que seja a melhor possível, admito que não sou nenhum expert em Delphi e estou estudando para aprender cada dia mais e entender como o delphi trabalha "por baixo dos panos", já trabalho há um bom tempo com Delphi, mas nunca havia me atentado a entender como o delphi trabalha, de uns tempos pra cá estou correndo atrás e tentando entender essa parte, mas como você bem sabe é muita coisa pra ser aprender e entender e pouco tempo.

 

 

 

Você sabia que o Delphi 6 não é preparado para trabalhar com unicode? Quero dizer, que dentro do código dele String é igual a AnsiString? Que esses tipos fazem parte do compilador e nem estão ao menos declarados numa Unit?

 

 

 

Referente ao Unicode sim, porém o resto não sabia!!!!  :oops:

 

 

 

A qualquer usuário do Delphi usando uma versão anterior ao 2007 que ainda não adiciona o FastMM no projeto eu aconselho a usar o FastMM. Se você não quer adicionar simplesmente por não querer, sem dar uma explicação, então, eu deixo de lado.

 

 

Sobre o FastMM, eu só conhecia ele para identificar vazamentos de memória, essa parte do gerenciamento de memória e do que ele faz eu realmente não sabia.

 

Coloquei ele aqui no meu sistema para testar e com a unit ACBrUtil.pas original do ACBr e mesmo assim meu sistema não rodou. O FastMM gerou um log que estou anexando aqui, gostaria que desse uma olhada se for possível.

 

Fiz o mesmo teste com a unit que fizemos a alteração, substituindo os casts pelo uso da função ACBrStr, meu sistema funcionou perfeitamente e o FastMM não me apresentou nenhum erro, nem gerou log.

 

 

 

 

wSac_MemoryManager_EventosLog.txt

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Consultores

EMBarbosa, meu intuito aqui é tentar entender o que está acontecendo e acharmos uma solução que seja a melhor possível...

Sem problemas. Apenas tente facilitar as coisas para quem está querendo ajudar. Nós temos uma base de usuários grande pela qual temos que zelar, não dá pra sair modificando os componentes assim sem explicação.

 

Vamos voltar então ao caso. O erro acontece com o ECFTeste ou só no seu projeto? Qual a mensagem de erro no ECFTeste? Se adicionar o FastMM no ECFTeste, o erro persiste? Em caso positivo a mensagem de erro muda ou é a mesma? Se mudar, anexe a imagem da mensagem de erro.

 

Verificar o ECFTeste vai reduzir o número de possíveis outros erros que podem tentar pegar carona no que estamos analisando.

 

Ainda usando o FastMM no ECFTeste, se ao invés de usar a função ACBrStr você usar o cast com AnsiString há alguma diferença? O erro persiste? E se você remover o cast e não usar o ACBrStr?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Experimente simplesmente remover todos os Casts... Eles foram inseridos mais para evitar Warnings do D2007 em diante... o problema é que nesse caso pode ser que atrapalhemos a vida desses usuários...

 

Mudar simplesmente os casts para ACBrStr() com certeza traria perda de informação importante... O ACBrECF usa muito AnsiString como um "String binário"... o ACBrStr tentaria interpretar isso...

 

Acho que alguma diretiva de compilação como: {$H+} pode resolver o seu problema...

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.

Link para o comentário
Compartilhar em outros sites

O erro acontece com o ECFTeste ou só no seu projeto?

Nos dois projetos!

 

Qual a mensagem de erro no ECFTeste?

Access Violation

 

Se adicionar o FastMM no ECFTeste, o erro persiste? Em caso positivo a mensagem de erro muda ou é a mesma? Se mudar, anexe a imagem da mensagem de erro.

Não deu o Access Violation, mas apareceu uma mensagem de Out of Memory no ECFTeste. Estou anexando o log do FastMM.

 

Ainda usando o FastMM no ECFTeste, se ao invés de usar a função ACBrStr você usar o cast com AnsiString há alguma diferença? O erro persiste? 

Troquei todos os ACBrStr por cast pra AnsiString, o erro persiste.

 

E se você remover o cast e não usar o ACBrStr?

 

Alterei a unit que tinhamos mexidos, e removi todos os ACBrStr que colocamos e não funcionou, não apresentou mensagem de erro.

 

ECFTeste_MemoryManager_EventLog.txt

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Consultores

Sério que eu queria ter o Delphi 6 aqui para poder investigar melhor...

Bom, vamos lá...

Nos dois projetos!

Access Violation

Você poderia postar a mensagem inteira?

 

Não deu o Access Violation, mas apareceu uma mensagem de Out of Memory no ECFTeste. Estou anexando o log do FastMM.

Não tem nada sobre essa mensagem de "Out of Memory" no log. Consegue dizer quando ela acontece? Se debugar, dá pra achar a linha específica?

 

Tem alguns Memory leaks, mas esses são memory leaks que vão incluídos no código do Delphi 6 e já são bem conhecidos (http://support.smartbear.com/articles/aqtime/leaks/leaksd6/).

Como são pequenos não atrapalham muito. De qualquer forma acrescente as seguintes linhas no dpr do ECFTeste pra poder tornar o relatório do FastMM mais eficiente:

// Registra memory leaks da VCL já esperados causados pela unit HelpIntfs padrão do Delphi.
FastMM4.RegisterExpectedMemoryLeak(36, 2); // THelpManager x 1, THTMLHelpViewer x 1
FastMM4.RegisterExpectedMemoryLeak(20, 7); // TObjectList x 3, THelpSelector x 1, Unknown x 3
FastMM4.RegisterExpectedMemoryLeak(52); // TWinHelpViewer x 1

 Depois de adicionar isso, faça um Build (não vale um compile), e tente novamente. Anexe o log outra vez.

 

Troquei todos os ACBrStr por cast pra AnsiString, o erro persiste.

 

Alterei a unit que tinhamos mexidos, e removi todos os ACBrStr que colocamos e não funcionou, não apresentou mensagem de erro.

Você quer dizer que, deixando sem cast e sem o ACBrStr o ECF não foi inicializado e nem apresentou nenhuma mensagem de erro?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

O Out of Memory acontece quando mando ativar a ECF, ai já aparece na barra de status do ECFTeste, agora está meio corrido aqui não vai dar pra fazer o teste e depurar.

 

Sobre o memoryleaks, esses eu realmente nem esquentei com eles de momento.

 

Alterei a unit que tinhamos mexidos, e removi todos os ACBrStr que colocamos e não funcionou, não apresentou mensagem de erro.

 

Desculpe na correria aqui acabei digitando errado, quando removi os ACBrStr que a gente tinha colocado no lugar dos casts funcionou corretamente, assim como estava funcionando com o ACBrStr.

 

Assim que tiver um tempo aqui, faço os outros testes  e a depuração e te falo o resultado.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Consultores

Ok. Bom trabalho aí.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

 Revivendo o assunto, agora estou pensando em utilizar o acbrECF para disponibilizar mais impressora no meu software, mas o problema de access violation com o Delphi 6 continua.

 pegando a dica do wrgoncalves2008 eu fiz outras alterações no ACBrUtils quando se trata de conversões AnsiString e String, passei a utilizar ACBrStrToAnsi e ACBrStr e esse erro parou de acontecer.

 A questão é que estes casts utilizando ACBrStr e ACBrStrToAnsi já possuem as diretivas de compilação para compatibilidade com outras versões e a minha questão é porque não utilizar esses casts no repositório ?

 pois se já foi testado com o Delphi Xe e funcionou perfeitamente ?

 

 

também na versão do delphi 6 que utilizo aqui funcionou

 

vou colocar aqui as funções que alterei para que possam analisar e corrigir no acbrUtils a fim de que futuras correções não danifiquem o que eu já alterei aqui.

 

 

WriteToTXT - onde tinha String alterei para ACBrStr;

HexToAscii  - onde tinha AnsiString alterei para ACBrStrToAnsi e

                  -  onde tinha String alterei para ACBrStr

 

IntToStrZero - onde  tinha AnsiString alterei para ACBrStrToAnsi

Poem_Zeros - onde Tinha AnsiString alterei para  ACBrStrToAnsi e

                     - onde tinha String alterei para ACBrStr

 

 

depois destas correções tudo funcionou perfeitamente no Delphi 6 .

no aguardo de qualquer posição da parte de vocês.

 

lembrando que funcionou com  o FastMM e sem o FastMM.

Link para o comentário
Compartilhar em outros sites

  • Consultores
a minha questão é porque não utilizar esses casts no repositório ?

E a resposta a essa questão é: Por que utilizar esses casts se você está fazendo um cast simples de AnsiString para AnsiString e está recebendo um AV?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

 Bom EMBarbosa, o problemas dos casts foram vocês que desenvolveram.

 Então o que nós precisamos e que resolva a compatibilidade com o Delphi 6, se vai remover o cast ou vai manter o cast não me interessa, somente me interessa que seja compatível com o delphi 6, tentei uma solução mas vejo que vocês não estão com muito interesse em solucionar esse problema para quem utiliza delphi 6.

 

 será que é possível manter essa compatibilidade ou vocês irão informar a comunidade geral que o ACBR não é mais compatível com o Delphi 6 ?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Casts com ACBrStr e ACBrStrToAnsi estão fora cogitação... isso trará perda de dados...

 

A muito tempo o Delphi 6 já foi declarado como não suportado pelo ACBr... A própria Embarcadero não nos disponibiliza uma IDE de Delphi 6 para testes...

 

Você deve fazer suas próprias modificações e manter sua versão separada, se deseja continuar com Delphi 6...

 

Ficou claro agora ?

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.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom EMBarbosa, o problemas dos casts foram vocês que desenvolveram.

   Mas não foi mesmo. Quem desenvolveu o Delphi 6 foi a Borland, então eles é quem desenvolveram o problema dos casts. :P

 

tentei uma solução mas vejo que vocês não estão com muito interesse em solucionar esse problema para quem utiliza delphi 6.

   O que eu tentei nesse tópico inteiro foi resolver o problema e até agora, pelo que entendi, usar o FastMM resolve o problema.

 

 se vai remover o cast ou vai manter o cast não me interessa, somente me interessa que seja compatível com o delphi 6

 

   Se quiser ajuda eu tenho disposição de ajudar. Mas de forma alguma vou fazer o trabalho sozinho pois não tenho o Delphi 6 na minha máquina nem desenvolvo para ele.

   Agora, se você não sabe o motivo de colocar ou remover o cast faz o componente ser compatível ou incompatível com o Delphi 6, você não fica numa posição de poder exigir alguma mudança...

   Não podemos fazer uma mudança porque "acontece um Access Violation". Um AV é um sintoma e não o motivo do problema.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

    O que eu tentei nesse tópico inteiro foi resolver o problema e até agora, pelo que entendi, usar o FastMM resolve o problema.

 

Só pra constar, o fastMM "não" resolve o problema,nem no projeto em que trabalho, nem no testeAcbr. Além dos AV, ele da erro também de out of memory..

 

O que funcionou no delphi 6 foi realmente remover os cast's...

Editado por jGuto
Link para o comentário
Compartilhar em outros sites

 Bom noite a todos,

 Descupem-me se fui ofensivo, mas estou também querendo resolver o problema e quando informei que os cast´s foram programado por voces estava me referindo somente a Unit ACBRUtils que está cheio de Cast AnsiString, String  que como o EMBarbosa comentou em um outro tópico "sem sentido".

 

 e mais uma vez eu peço desculpa se fui ofensivo essa não era a minha intenção.

 

só para fechar o assunto,  fiz a remoção dos cast's conforme a orientação do Daniel Simões e os erros foram solucionado.

 

sem mais para o momento sou grato a todos pela colaboração.

Editado por Anizair Lopes
Link para o comentário
Compartilhar em outros sites

Bom pessoal, entendo que todos aqui estamos procurando a melhor de forma resolver esse nosso dilema, já tivemos várias sugestões e idéias aqui mas infelizmente nenhuma, na minha opinião é uma solução, vamos dizer assim, 100%.

 

No início sugeri colocar uma diretiva de compilação, para caso fosse versão acima do Delphi 6, trabalhasse de uma forma como está caso contrario seria colocado um ajustes para delphi 6, resolveria porém como o EMBarbosa disse nos posts anteriores não estariamos identificando ao certo o problema, e a sugestão também foi descartada.

 

Com o FastMM até conseguimos alguma coisa porém não resolveu o problema também.

 

Utilizar as funções de conversão (ACBrSTr,...)? Resolveu o problema, porém entendo a preocupação de você em manter a estabilidade do ACBr, e não culpo ninguém por isso, eu também não colocaria nada em meu sistema sabendo que corro o risco de ter problemas mais pra frente.

 

Remover os casts? Sim resolveu o problema, porém o ACBr é uma suíte componentes em desenvolvimento e com constantes atualizações, assim se mantivermos dessa forma ou paramos de atualizar o ACBr ou toda vez que atualizarmos teremos que ajustar a unit ACBrUtil.

 

Se a gente só utilizasse o ACBrECF seria mais fácil não atualizar, mas também utilizamos outros componentes, como por ex. SPED e NFe.

 

Acredito que apesar de "defasado" ainda tem muita gente que utilize o Delphi 6.

 

Para nos migrarmos de versão do Delphi, infelizmente de momento está totalmente fora de questão, devido a componentes que foram utilizados que eram do delphi 6 e foram descontinuados a partir da versão 7 entre outras coisas.

 

Até hoje temos módulos feitos em Delphi 7 ou XE para solucionar alguns problemas incompatibilidade.

 



   Se quiser ajuda eu tenho disposição de ajudar. Mas de forma alguma vou fazer o trabalho sozinho pois não tenho o Delphi 6 na minha máquina nem desenvolvo para ele.

 

 

EMBarbosa, agradeço a ajuda que está dando para tentarmos resolver o problema, como já foi feito antes podemos tentar simular por aqui, continue nos dando idéias e sugestões.

 

O meu problema não é utilizar as soluções sugeridas aqui, apenas gostaria que chegássemos a um ponto que conseguíssemos eliminar esse problema, sem ter que ficar alterando arquivos todas vez que atualizar, pois pode ocorrer erros, ou então para de atualizar o componente, que acredito ser pior ainda.

 

Mesmo com essas soluções ainda não respondemos a pergunta feita lá no inicio da discussão: Porque um cast de AnsiString para AnsiString gera um AV ?  :mad:

 

Então eu ainda volto a sugerir a opção da diretiva, pois assim podemos utilizar/criar uma função que faça o cast como já existe hoje ou não faça, e não geramos o empecilho que citei acima, porém se realmente não der pra feito, a gente vai levar nas coxas até sair do Delphi 6.

 

Para o AV, minha hipótese para isso seria alguma coisa mais ou menos assim: 

Durante o cast o delphi percorre a string caracter a caracter mais ou menos como está abaixo, porém o "i" deveria ir somente até o 255, e quando ele passa disso ele da o A.V.

function AnsiString( aTexto ): ...
begin
  for i := 1 to length(aTexto) do
  begin
    aResult := aResult + aTexto[i];
  end;

  Result := aResult;
end;  

Só lembrando que como já disse anteriormente, ainda não sei ao certo como o Delphi trata isso internamente, isso apenas é algo que me veio na cabeça, num momento inspiração...rs.

 

Agradeço a todos pelo colaboração.

Editado por wrgoncalves2008

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa noite

vou dar uma sugestão, seria interessante no caso do amigo Willians , Anizair e jGuto estarem tratando nos seus fontes atualizados do ACBr

para que fique totalmente compatível com o Delphi 6, já que a necessidade de estarem usando essa versão

e depois anexarem os arquivos no post, assim nós poderemos analisar e ver senão fica incompatibilidades com as outras versões do delphi

o que acha Elton?

 

só uma observação hoje a Embarcadero só disponibilizar do delphi 7 para cima as versões

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Acho que os casts String() e AnsiString() foram introduzidos para evitar warnings de compilação nos Delphis mais novos...

 

No Lazarus eles não fazem a menor falta... alguém sabe me dizer se no XE e superiores eles são realmente necessários ?

  • Curtir 1
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.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Juliomar,
  Eu não vejo problema algum. O que não pode é sair mudando o componente sem saber o motivo arriscando dar problemas com nossos muitos usuários. Eu concordo com o Daniel nisso, e o Willians teve o bom senso de concordar também.
 
Daniel,
  Se os casts foram adicionados apenas para remover o warning, não vai haver algum problema. Na verdade, quando não há o cast explícito, o próprio Delphi adiciona esse cast implicitamente. E este é o motivo do warning. O warning avisa que quando se converte de String para AnsiString pode haver perda de dados.
  É como se o compilador dissesse: "Cara. Eu vou passar esses caracteres na peneira. Se você colocou algo maior que o furo da peneira pode ficar pra trás."
  A grosso modo podemos dizer que há caracteres possíveis no modelo unicode que não é possível no ANSI. Mas se o dado armazenado na string é convertível para ANSI por talvez ter sido formado em ANSI em primeiro lugar, então não deve dar algum problema.
  O Cast explícito é como se disséssemos ao compilador: "Ei, confia em mim! Eu sei o que estou fazendo."
 

Para nos migrarmos de versão do Delphi, infelizmente de momento está totalmente fora de questão, devido a componentes que foram utilizados que eram do delphi 6 e foram descontinuados a partir da versão 7 entre outras coisas.


Estou muito curioso. Que componentes/classes/units você usa no Delphi 6 e não conseguiu usar no Delphi 7?

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Bom Dia pessoal

 

EMBarbosa, o principal problema seria componentes,  um desses componentes que tenho problema é o SQLCLientDataSet, ele é nativo no Delphi 6, porém já no Delphi 7 ele nem vem mais instalado, já tentamos instalar ele mas ai começa a aparecer erros no sistema.

 

Se não fosse por esse componente a gente já teria saído do Delphi 6 faz tempo, mas ele foi utilizado em grande quantidade no sistema, e devido a falta de conhecimento de quem estava utilizando ele, fizeram várias "gambiarras" para corrigir alguns problemas que apresentava no sistema. Agora pra gente remover esses componentes vá levar um tempo considerável e teremos que retestar praticamente o sistema todo.

 

Por isso não fizemos a migração ainda, e agora estamos aqui com esse probleminha...rs

 

Agora EMBarbosa / Daniel / Anizair / Juliomar, sobre o nosso problema para gente tentar finalizar esse post :-P , vamos colocar algo no ACBr oficial para resolvermos o problema ou teremos que manter o fonte separado aqui para trocarmos quando fizermos a atualização? Como citei anteriormente a última opção funciona, porém pode gerar erros, lógicamente que para nós que ainda estamos no delphi 6, e digo isso por experiência própria... :mad:...

 

 

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Sim Willian conforme foi dado a sugestão, você usa o delphi 6, então é pegar os fontes do ACBr, compatibilizar com ele e subir em anexo aqui no fórum que algum dos commiter vai analisar corrigir e subir as possíveis correções ;)

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

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