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 :

SendMessage avec un float comme lParam


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut SendMessage avec un float comme lParam
    Bonjour à tous

    Je cherche à faire un SendMessage avec 2 paramètres en wParam et lParam : un float, et un int.

    Le problème étant que wParam et lParam sont tous les deux des int, je ne trouve pas de solution à mon problème ...

    Si quelqu'un a une idée, je suis preneur

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Et si tu envoyais l'adresse de ce float au lieu de sa valeur ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    au début je n'y avais pas pensé, et le temps d'écrire ce message, j'y ai pensé ... du coup c'est ce que j'ai fait pour l'instant.

    mais ça ne m'arrange pas trop, parceque ce sendmessage est dans une boucle, et pour être sur de ne pas perdre la valeur entre l'envoi et la réception, je dois stocker ce float du lParam dans un array temporaire ...

    pour l'instant ça passe, mais si quelqu'un a mieux, je prend

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    par contre mon code n'a pas l'air de fonctionner ... il me semblait que je faisais ça (longtemps que j'ai plus fait de Delphi ^^) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // envoi
    PostMessage (FindWindow (nil, 'XXX'), PM_NEW_VALUE, i, Integer (@Values[i]));
     
    // réception
    String (Pointer (TMessage (Msg).LParam))
    quand je lis Msg.WParam (à savoir i dans l'envoi donc), aucun problème. quand je veux lire la valeur du pointer donné dans LParam, j'ai un accès violation

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Passé un pointeur, cela nécessiterait pas que l'application qui reçoit le message puisse lire dans l'espace mémoire de l'application qui émet ?

    Utilise WM_COPYDATA si tu veux sur : Envoyer une chaine a une application externe

    Après tout WM_SETTEXT fonctionne bien entre une application Delphi et Notepad
    Est-ce valable pour tout les messages ou Windows dans sa tambouille copie la chaine du processus émetteur dans l'espace du processus recepteur ?

    Une QR était en cours à ce sujet en 2008, je ne crois pas qu'elle a été publié

    Attention !

    PostMessage, effectivement, comme il n'attend pas la traitement, il ne faut pas libérer ou modifier le contenu du pointeur float
    Vérifie via IsBadReadPtr si tu as le droit de lire le pointeur (ce qui m'étonnerait en fait)
    Déjà qu'entre DLL et EXE c'est la plaie les string alors entre EXE ???

    Même par ta gestion de tableau tampon, tu conserves toutes les données, combien de temps après la fin du traitement (après tout tu n'as pas la garantie que le recepteur aie lu rapidement tes données)

    SendMessage, il a attend patiemment le traitement donc pas de soucis de libération prématurée, mais encore une fois, je suis persuadé qu'en fonction du message windows triche avec la mémoire inter-processus !

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Est-ce qu'un Single te suffirait ? Il tient sur 32Bits et tu pourras le passer dans un Integer juste avec un transtypage (pas un round ni trunc bien sûr).

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    WM_COPYDATA c'est pour des données inter process.

    si c'est à l'intérieur d'un même process il suffit d'allouer d'un côté et de libérer de l'autre.

    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
    20
     
    var
      p: PDouble;
    begin
      New(P);
      P^ := Value;
      PostMessage(Handle, PM_NEW_VALUE, i, Integer(P));
    end;
     
    procedure TForm1.PMNewValue(var Msg: TMessage);
    var
      P: PDouble;
    begin
      P := Pointer(Msg.lParam);
      try
        ...
      finally
        Dispose(P);
      end;
    end;

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Tout a fait Paul, en fait, en relisant la question, je me suis rendu compte qu'il n'y avait pas mention à de l'inter-process, j'ai tout de même laissé ma réponse intact

    Un SendMessage au sein du même process, ne pose aucun problème sur les Pointeurs c'est pour cela que j'ai pensé qu'il avait à de l'inter-process
    Pour PostMessage, il faut l'utiliser uniquement si la durée de vie de la mémoire associé au pointeur est suffisament longue ou permanente pour ce permet un pseudo-asynchronisme !

    SendMessage à l'intérieur d'un programme Delphi, je ne comprends pas trop !
    Je triche avec parfois avec PostMessage pour différer des traitements et donner une illusion d'Asynchrone d'une Fenêtre, certains utilisent par exemple un Timer qui ne s'active qu'une fois ou alors le OnActivate

    En interne dans un programme cela pourrait être fait par du CallBack comme un Evènement ou encore un TEvent + FIFO TThreadList

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    j'utilise typiquement le PostMessage pour informer le thread principal de l'état d'avancement d'un thread secondaire. ça ne ralenti pas le thread secondaire et le thread principal traite le message quand il en a le temps.

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    En réalité, tu n'informes pas le Thread principal mais la fenêtre Principale !
    Effectivement, c'est le défaut du Synchronize mais aujourd'hui il y a Queue !
    Mais il manque toujours un paramètre Pointer, il serait tellement pertinent que l'on puisse passer un paramètre, on est obligé de passer par un Singleton pour Synchronize ou par une TThreadList avec Queue, c'est pénible !
    Je n'ai jamais tenté le tutoriel qui explique comment forcer cela, trop osé !

    Personnellement, j'ai aussi couplé PostMessage avec un TThreadList,
    Au début, j'utilisais un Timer mais c'est tellement lourd par rapport au PostMessage
    Car utiliser WaitForSingleObject dans le Thread principal, c'est pas du tout pratique (j'avais tenté dans le OnIdle avec un tout petit TimeOut pour ne pas geler l'application), il en va de même pour l'encapsulation VCL TEvent !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    Shai était dans le vrai, j'ai bien 2 applications (faites par moi donc j'ai le code source des deux) qui doivent communiquer entre elles.

    J'ai testé le code de Shai, ça fonctionne "à peu près". Des fois j'ai des access violation aléatoirement ... J'ai compris le principe, mais je n'arrive pas à trouver d'où ça pourrait merdouiller.

    Déja le receiver ne fonctionne pas, CopyMemory plante (access violation) à chaque fois. En mettant ce code en commentaire, c'est le send qui plante, aléatoirement, en faisant un access violation.

    un peu compliqué tout ça je trouve pour envoyer une bête donnée entre 2 applis ...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Nono40 Voir le message
    Est-ce qu'un Single te suffirait ? Il tient sur 32Bits et tu pourras le passer dans un Integer juste avec un transtypage (pas un round ni trunc bien sûr).
    oui ça me suffirait, mais je ne vois pas comment envoyer ce Single avec SendMessage (c'est ma toute 1ère question en fait )

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    J'ai lu dans la Cerboise et dans le Sanglier !

    tu utilise bien WM_COPYDATA avec SendMessage et surtout pas avec PostMessage !
    C'est le seul moyen propre pour envoyer un pointeur d'une application à une autre en pensant par les messages !

    Sinon CreateFile\CreateFileMapping\MapViewOfFile

    ben pour le Single, il n'y a rien plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(Handle, WM_TRUC, WPARAM(MonSingle), 0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonSingleReçu := Single(Message.WParam);
    Single = 4 octets comme WPARAM (32Bits)
    Double = 8 octets !!! ça passerait si uniquement 64bits

    en fait, tu n'avais jamais spécifié le type float depuis le début du sujet, on est tous parti sur le fait que tu voulais échanger un Double par Pointer pour dépasser la limite des 4 octets (sous Win32 car sous Win64 WPARAM et LPARAM suive l'évolution du UINT_PTR qui passe de 32 à 64)

    Mais en 32 Bits, il y a la solution du découpage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(Handle, WM_TRUC, TLargeInteger(MonDouble).LowPart, TLargeInteger(MonDouble).HighPart);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var Tmp : TLargeInteger;
     
    Tmp.LowPart := Message.WParam;
    Tmp.HighPart := Message.LParam;
    MonDoubleReçu := Double(Tmp.QuadPart);

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    pour le Single, ça passe pas, invalid type cast sur l'appel à WParam.

    le découpage c'est un peu l'idée que j'ai en ce moment, je passe la partie entière du single dans LParam et la partie décimale dans WParam (moche ...). mais du coup aujourd'hui j'ai besoin de passer un single "et" un byte, donc je dois récupérer LParam ou WParam pour passer ce byte

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Ah le cast ne fonctionne pas, je suis sous C++Builder depuis un an et demi, je rouille litéralement en Delphi
    est-ce mieux avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(Handle, WM_TRUC, Integer(MonSingle), 0);
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(Handle, WM_TRUC, PInteger(@MonSingle)^, 0);
    MonSingle doit être Single, pas Double ni Real


    Citation Envoyé par Sephiroth Lune Voir le message
    J'ai testé le code de Shai, ça fonctionne "à peu près". Des fois j'ai des access violation aléatoirement ...
    Si tu as copié le code là
    sache qu'il y a une horreur absolue et que cela ne gère pas du tout l'Unicode !

    Ce truc là, peux planter si le Text ne fait pas au moins 60 caractères, et pour l'unicode, cela fait n'importe quoi !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyMemory(@Truc.C, @MemoSend.Lines.Text[1], 60);
    J'ai encore l'exe compilé en D7 avec ce code (sauf la partie mémo qui est différente)
    Je lance deux instances du programme et j'échange très bien sans VA
    Pour le moment, tu testes comment ?
    Le même programme lancé deux fois (c'est ce que je fais)
    Si deux programmes différent, fait attention à l'alignement mémoire dans les options de projet



    tente ceci rester ANSI même en 2009..XE2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type
       TTrucData = packed record // oh alignement sur 1 pour pas de soucis
          I: Integer;
          D: Double; 
          C: array[1..60] of AnsiChar;
       end;
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    procedure TFrmTestMemory.BtnSendDataClick(Sender: TObject);
    var
       Truc: TTrucData;
       Data: PCOPYDATASTRUCT;
    begin
       lblHandleMe.Caption := IntToStr(Self.Handle);
       if StrToIntDef(EdHandleOther.Text, 0) <= 0 then
       begin
          Exit;
       end;
     
       Truc.I := MemoSend.Lines.Count;
       Truc.D := Now();
       StringToArrayOfChar('Salut', @Truc.C[1], Length(Truc.C));
     
       New(Data);
       Data.dwData := 0;
       Data.cbData := SizeOf(Truc);
       Data.lpData := @Truc;
       SendMessage(StrToInt(EdHandleOther.Text), WM_COPYDATA, Self.Handle, LongInt(Data));
     
       Dispose(Data);
    end;
     
    procedure TFrmTestMemory.ReceiveData(var message: TMessage);
    var
       Truc: TTrucData;
       Data: PCOPYDATASTRUCT;
       Reveive: PChar;
    begin
       if message.LParam > 0 then
       begin
          CopyMemory(@Truc, PCOPYDATASTRUCT(message.LParam).lpData, PCOPYDATASTRUCT(message.LParam).cbData);
     
     
          MemoReceive.Lines.Text := Truc.C;
          MemoReceive.Lines.Add(IntToStr(Truc.I));
          MemoReceive.Lines.Add(FormatDateTime('dddd dd mm yyyy hh:nn:ss zzz', Truc.D));
       end;
    end;
    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
    procedure StringToArrayOfChar(const S: AnsiString; const AoC: PAnsiChar; const LengthAoC: Integer);
    var
      LengthS: Integer;
    begin
      if LengthAoC <= 0 then
        Exit;
     
      LengthS := Length(S);
      if LengthS < LengthAoC then
      begin
        ZeroMemory(Pointer(Integer(AoC) + LengthS), LengthAoC - LengthS);
        CopyMemory(AoC, @S[1], LengthS);
      end else
      begin
        StrLCopy(AoC, @S[1], LengthAoC);
      end;
    end;

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    Integer (MonSingle) compile pas : invalid type cast
    PInteger (MonSingle)^ compile, mais plante (access violation).

    en même temps je vais paraitre con, mais je vois pas comment on peut faire passer un type Single dans un type Int ...

    ce sont 2 programmes totalement différents, ce n'est pas le même lancé 2 fois. je ne vois pas de quoi tu parles dans "alignement mémoire dans les options de projet", je n'ai pas trouvé de choses similaires dans mon D6.

    Je test ton bout de code et je te tiens au jus

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    niquel le bout de code fonctionne à merveille

    je n'aurai pas cru qu'on pouvait passer un pointeur sur une structure dans les API Windows.

    j'aurai appris un gros truc aujourd'hui

    merci beaucoup Shai, comme d'hab t'es toujours à fond et très technique

  18. #18
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Citation Envoyé par Sephiroth Lune Voir le message
    PInteger (MonSingle)^ compile, mais plante (access violation).
    Attention, il manque l'arobase @ !

    Citation Envoyé par Sephiroth Lune Voir le message
    en même temps je vais paraitre con, mais je vois pas comment on peut faire passer un type Single dans un type Int ...
    Effectivement cela n'a pas de sens mais d'un point de vue mémoire c'est 32 bits chacun !
    Mais tu as raison, j'ai testé en C++Builder 2007, on peut y inclure du code Delphi, et la 1ère ligne ne passe pas et j'ai compris pourquoi en relisant l'aide sur le Transtypages

    le transtypage type32<->type32 fonctionne sans soucis tant que l'on ne mélange pas Single et Integer pour éviter une confusion d'une conversion implicite comme en C++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      PostMessage(0, 0, Integer(MonSingle), 0); // Ne Compile pas !
      PostMessage(0, 0, PInteger(MonSingle)^, 0); // Compile mais Attention mais @, cela utilise le contenu 32 bits du Single comme Pointeur du grand n'importe quoi donc VA
      PostMessage(0, 0, PInteger(@MonSingle)^, 0); // Compile et devrait fonctionner !
    Pour reprendre la 1ere ligne on peut écrire ceci et ça compile !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var 
      MonSingle : record value: Single; end;
    begin 
      MonSingle.Value := 1.01;
      PostMessage(0, 0, Integer(MonSingle), 0);
    D'un point vue mémoire, tu faire croire que ton record de 32bits en un entier !


    Citation Envoyé par Sephiroth Lune Voir le message
    "alignement mémoire dans les options de projet", je n'ai pas trouvé de choses similaires dans mon D6.
    Options de Projet
    Onglet Compilateur (Pascal)
    Group Génération de Code
    tu dois problablement avoir 8 dans la Combo "Champs d'enreg. alignés"

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Points : 60
    Points
    60
    Par défaut
    je comprend que Integer et Single soient des 32 bits. ce que je comprend pas, c'est qu'en passant de Single à Integer, on "perd" l'info de la position de la virgule, donc comment la retrouver après quand on retype ça en Single ? a moins qu'on ne perde pas cette virgule, mais là je sais pas comment ça marche alors

    pour le coup du record, ça veut donc dire que mon record total doit pas dépasser 32 bits ? c'est ça ?

    sinon merci pour les détails, j'apprend beaucoup (trop longtemps sans Delphi, j'ai du mal à m'y remettre )

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    Il ne s'agit pas d'une conversion, mais uniquement d'interpréter ces 4 octets d'une façon ou d'une autre. La mémoire n'est pas altérée

Discussions similaires

  1. [debutant]fonction "split" avec une chaine comme m
    Par EpOnYmE187 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/11/2005, 22h46
  2. [XHTML] problème avec les float:left
    Par glloq8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/11/2005, 17h15
  3. erreur avec les floats
    Par Halobox dans le forum C
    Réponses: 14
    Dernier message: 11/10/2005, 23h23
  4. Probleme <div> et float -> comme un tableau!
    Par elraton dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/08/2005, 19h49
  5. Réponses: 9
    Dernier message: 13/04/2005, 22h08

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