Jump to content

Ponteiros 64Bits


passarito
 Share

Recommended Posts

Boas a todos.

Algum tempo atrás desenvolvi uma app(zita) para pesquisar e apagar ficheiros antigos:

https://www.portugal-a-programar.pt/topic/50296-pesquisa-na-estrutura-de-directorios/page__st__60__hl__deloldf?do=findComment?comment=437744

Agora tive necessidade de correr aquilo em x64 e começaram os meus problemas:

1. Arranjar o IDE+Compilador para x64.

Só arranjei em russo ou Ucraniano ou coisa que o valha, mas consegui compilar.

2. O programa compilado executa mas estoira nos ponteiros. Alguém sabe se há alguma incompatibilidade dos ponteiros no x64?

Já agora, se alguém souber de um IDE+Compilador (mesmo em modo de texto), para windows x64 seria muito bom para e tentar resolver este problema.

Obrigado

Link to comment
Share on other sites

Sim, já fiz o download de 2 FPC's para win X64, mas não têm o IDE.

Experimentei também compilar aquilo com o Delphi 7 e com o Lazarus, mas estes não compilam programas de Pascal puro.

Descobri aqui num disco esquecido um IDE do FPC 2.4.4 win32

Vamos lá ver se isto depois de compilado funciona no win64....

Link to comment
Share on other sites

Instalas o FPC normal (Win32), e depois metes-lhe o Win64 na mesma pasta.

Tens depois de alterar nas opções qual o compilador a usar.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Passa isso para objectos, e usa uma classe para isso (estou a falar, mas não sei em quê que estás a usar os ponteiros).

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

É a primeira vez que ouço falar de problemas deste género com ponteiros em Pascal entre x86 e x64. Não entendo qual possa ser o problema.

Não analisei o código por completo. @passarito, indicaste expressamente e de alguma forma o tamanho das variáveis nos endereços? Por exemplo, em C, se não usas a função sizeof vais ter problemas bastante sérios.

O que eu uso são arrays dinâmicos. Quando implementados com optimização em mente, eles tornam-se seguros, fáceis de manipular e fáceis de manter em código.

Knowledge is free!

Link to comment
Share on other sites

Não analisei o código por completo. @passarito, indicaste expressamente e de alguma forma o tamanho das variáveis nos endereços? Por exemplo, em C, se não usas a função sizeof vais ter problemas bastante sérios.

Pode ser disso, na realidade eu não uso o sizeof(), estou a usar o new()

O que eu uso são arrays dinâmicos. Quando implementados com optimização em mente, eles tornam-se seguros, fáceis de manipular e fáceis de manter em código.

Depois de do meu ultimo post lembrei-me que o FPC tem arrays dinâmicos e que seria uma possibilidade bastante viável.

Link to comment
Share on other sites

pwseo,

Obrigado pelo estudo aprofundado do problema.

Quanto ao funcionar em 32-bits, posso-te garantir que desde que fiz o programa até hoje, este, esteve e ainda está atrabalhar em 2 PC's Win XP 32 bits. Um de partilha de ficheiros e outro servidor de FTP.

Já apanhei com cada uma... esta é só mais um para o role!

Link to comment
Share on other sites

Possivelmente nem tem a ver com o número de bits, mas com a forma de lidar com os AV's do compilador.

Possivelmente o BP7 dá a volta ao esquema sem se queixar, ou então testa as condições da direita para a esquerda...

No FPC 32 bits dá erro?

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Após ler um pouco mais, fiquei a saber que a ordem de avaliação dos operandos de and e or não está definida no Standard; fica ao critério da implementação.

Para colmatar essa falha, o Extended Pascal incluiu dois novos operadores (and_then e or_else) que só avaliam o 2º operando se o primeiro for equivalente a true.

Actualmente, só vi o GNU Pascal a implementar estes operadores. No caso do FreePascal, os operadores booleanos fazem curto-circuito e são sempre avaliados da esquerda para a direita, comportando-se por defeito como os and_then e or_else do Extended Pascal.

Nota: se o programa for compilado com {$B+}, então o curto-circuito não é feito e ambos os operandos são avaliados o que, neste programa, resultaria em access violations independentemente da ordem das verificações.

Link to comment
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
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. 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.