IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Transtypage incorrect Win64 LongRec Int64Rec


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut Transtypage incorrect Win64 LongRec Int64Rec
    Bonjour,

    Ma procédure ne fonctionne pas en mode 64.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    { Private : XGridWndProc }
    procedure TForm1.XGridWndProc(var Msg: TMessage);
    begin
    {$IFDEF WIN32}
      if (Msg.Msg = WM_VSCROLL) and (LongRec(Msg.wParam).Lo = SB_THUMBTRACK) then
      begin
        LongRec(Msg.wParam).Lo := SB_THUMBPOSITION;
      end;
    {$ENDIF}
    {$IFDEF WIN64}
      if (Msg.Msg = WM_VSCROLL) and (Int64Rec(Msg.wParam).Lo = SB_THUMBTRACK) then
      begin
        Int64Rec(Msg.wParam).Lo := SB_THUMBPOSITION;
      end;
    {$ENDIF}
     
      if Assigned(XGridWndMethod) then
        XGridWndMethod(Msg);
    end;
    J'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... and (LongRec(Int64Rec(Msg.wParam)).Lo = SB_THUMBTRACK)
    Erreur :
    E2089 Transtypage incorrect.
    E2010 Types incompatibles : 'LongRec' et 'Integer'.

    Merci.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  2. #2
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    Plus d'erreurs mais ne fonctionne toujours pas en mode 64.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    { Private : XGridWndProc }
    procedure TForm1.XGridWndProc(var Msg: TMessage);
    begin
      if (Msg.Msg = WM_VSCROLL) and ({$IFDEF WIN64}Int64Rec{$ELSE}LongRec{$ENDIF}(Msg.wParam).Lo = SB_THUMBTRACK) then
      begin
        {$IFDEF WIN64}Int64Rec{$ELSE}LongRec{$ENDIF}(Msg.wParam).Lo := SB_THUMBPOSITION;
      end;
     
      if Assigned(XGridWndMethod) then
        XGridWndMethod(Msg);
    end;
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 454
    Points : 24 866
    Points
    24 866
    Par défaut
    Cela ne pourrait s'écrire comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if (Msg.Msg = WM_VSCROLL) and ((WORD(Msg.wParam) and SB_THUMBTRACK) = SB_THUMBTRACK) then
      begin
        Msg.wParam := Msg.wParam and WORD(not SB_THUMBTRACK) or SB_THUMBPOSITION ;
      end;
    Lo du Int64Rec c'est 32 bits
    Lo du LongRec c'est 16 bits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if (Msg.Msg = WM_VSCROLL) and {$IFDEF WIN64}Int64Rec(Msg.wParam).Words[0]{$ELSE}LongRec(Msg.wParam).Lo{$ENDIF} = SB_THUMBTRACK) then
      begin
        {$IFDEF WIN64}Int64Rec(Msg.wParam).Words[0]{$ELSE}LongRec(Msg.wParam).Lo{$ENDIF} := SB_THUMBPOSITION;
      end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    Merci ShaiLeTroll
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 689
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 689
    Points : 13 118
    Points
    13 118
    Par défaut
    Ou en utilisant la structure prévue pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (Msg.Msg = WM_VSCROLL) and (TWMScroll(Msg).ScrollCode = SB_THUMBTRACK) then
        TWMScroll(Msg).ScrollCode := SB_THUMBPOSITION;
    Les structures de messages sont toutes correctement alignées pour le 32 et 64 bits.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 454
    Points : 24 866
    Points
    24 866
    Par défaut
    TWMScroll, très bonne remarque, je ne l'ai jamais utilisé celui là
    J'aurais du y penser vu que je fais mes propres structure de message, utilisé en 32 bits seulement mais théoriquement compatible 64bits puisque pomper depuis TWMEnable

    genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    type
      TCMDelayedLocate = record
        Msg: Cardinal;
        MsgFiller: TDWordFiller;
        MagasinCode: Integer;
        MagasinCodeFiller: TDWordFiller;
        Unused: LPARAM;
        Result: LRESULT;
      end;
     
    ...
        procedure CMDelayedLocate(var Message: TCMDelayedLocate); message CM_DELAYED_LOCATE;
    ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transtypage de classe incorrect
    Par Shibron dans le forum Rave
    Réponses: 1
    Dernier message: 09/02/2009, 15h45
  2. erreur transtypage incorrect
    Par OutOfRange dans le forum Delphi
    Réponses: 4
    Dernier message: 05/10/2006, 19h44
  3. [C++]closure + héritage + transtypage
    Par JEG dans le forum C++Builder
    Réponses: 11
    Dernier message: 30/01/2004, 14h26
  4. [VB6] [MSChart] Courbe incorrecte
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 08/10/2002, 21h53
  5. [transtypage]PChar et WideString
    Par rbag dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/09/2002, 20h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo