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

Windows Discussion :

Valeur d'un handle: un nombre négatif ?


Sujet :

Windows

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Valeur d'un handle: un nombre négatif ?
    Bonjour,

    Le contexte:
    Je code une fonction qui doit retourner un handle de fenêtre ou 0.
    Mais dans certains cas je voudrais que la fonction retourne une valeur spéciale (à usage interne) par exemple -1 (ou d'autres nombres plus petits que 0).
    J'ai peur que cette convention ne soit pas pertinente, si jamais un handle a une valeur négative.

    La question:
    Savez-vous si un handle de fenêtre peut être un nombre négatif ?
    Ou bien est-ce forcément un nombre supérieur à 0 ?


    Merci pour votre aide.
    _

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Comme tu peux le voir ici, un handle de fenêtre est un type opaque, représenté par un void*, un pointeur générique quoi, donc pas moyen de mélanger ça avec un entier.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Nicolas, merci pour ta réponse.

    Donc, en regardant le lien que tu donnes et en y réfléchissant un peu, je crois comprendre que:

    Une API Windows qui retourne un handle de fenêtre (par exemple, GetDesktopWindow) en fait retourne un pointeur, donc une adresse.
    Une adresse est stockée avec un type DWORD, donc un entier non signé.

    Je programme en VB6 qui ne propose pas de type entier non signé.
    D'ailleurs, en VB voilà comment on déclare l'API GetDesktopWindow:

    Code VB6 : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long

    ...où le type Long est un entier signé.

    Donc j'en conclus que POUR VB6, la valeur d'un handle de fenêtre peut être un nombre négatif.

    Par conséquent, je vais devoir reconsidérer ma convention de retour de valeur.

    Mais il me reste peut être un espoir...

    Dans Windows, la valeur héxadécimale &hFFFFFFFF a-t-elle une signification particulière ???

    Cette valeur &hFFFFFFFF, une fois placée dans un Long de VB6 est interprétée par celui-ci comme la valeur -1.
    Cela pourrait peut-être me suffire...


    Si quelqu'un a une idée, surtout qu'il n'hésite pas à me répondre.
    Et encore merci.
    _

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Voilà, je crois avoir trouvé la réponse à ma dernière question.

    Dans les API Windows, la valeur 0xFFFFFFFF est une valeur particulière.
    Notamment, elle peut servir à désigner un handle invalide.

    Donc, ma petite fonction retournera, au choix: un "vrai" handle, 0 ou -1.
    _

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Bien que je ne sois pas certain de la légitimité de ce que tu fais, juste une chose, si tu programmais en C ou C++, je te dirais que le type DWORD n'est pas le bon, car sur WIN64, le type void* est sur 8 bytes, alors que le type DWORD reste sur 4 bytes, mais je ne connais pas les problèmes de portabilité lié au 64 bits en VB, tout simplement car je ne connais pas ce langage.
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour Nicolas,

    Merci d'avoir pris le temps pour la mise en garde sur la plateforme 32 ou 64 bits.
    Mais je suis dans un environnement homogène (que des PC Win32) et la question de la portabilité ne se pose pas... (ouf ).

    Citation Envoyé par nicolas.sitbon Voir le message
    Bien que je ne sois pas certain de la légitimité de ce que tu fais, juste une chose, si tu programmais en C ou C++, je te dirais que le type DWORD n'est pas le bon, car sur WIN64, le type void* est sur 8 bytes, alors que le type DWORD reste sur 4 bytes, mais je ne connais pas les problèmes de portabilité lié au 64 bits en VB, tout simplement car je ne connais pas ce langage.
    En revanche, ta réponse m'intrigue quant à la compatibilité d'applications Win32 avec Win64, et ce souci intéresse la communauté VBA de DVP (dont je suis un membre actif).
    Pour ton information (au cas où tu ne le connaîtrais pas) VBA est un environnement de développement basé sur VB6 utilisé en association avec une application hôte (exemple MS Word, Excel, Visio, Access, Autocad, etc.).
    Ces applications sont 32 bits.

    Que se passe-t-il si j'installe une appli 32 bits sur un Win64 ?
    Y-a-t-il un mode d'exécution qui simule Win32 dans Win64 ?
    _

  7. #7
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Mais je suis dans un environnement homogène (que des PC Win32) et la question de la portabilité ne se pose pas... (ouf ).
    Oui mais faut penser à demain...

    Citation Envoyé par =JBO= Voir le message
    Que se passe-t-il si j'installe une appli 32 bits sur un Win64 ?
    Y-a-t-il un mode d'exécution qui simule Win32 dans Win64 ?
    Oui : http://en.wikipedia.org/wiki/WOW64
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il existe déjà des valeurs de HWND particulières: Certaines valent zéro, d'autres valent autre chose.

    Voir les valeurs pour HWND_DESKTOP, HWND_BROADCAST, HWND_TOPMOST...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [VB.NET] limiter les valeurs d'un champs aux nombres
    Par fabrozor dans le forum Windows Forms
    Réponses: 25
    Dernier message: 28/04/2006, 12h06
  2. Problème de tri de nombre négatif dans un état
    Par loutsky dans le forum Access
    Réponses: 11
    Dernier message: 21/04/2006, 14h30
  3. Convertir la valeur d'un handle
    Par ni0urk dans le forum MFC
    Réponses: 5
    Dernier message: 07/01/2006, 12h31
  4. [D7 Ent. / XP] Trunc() sur un nombre négatif
    Par Magnus dans le forum Langage
    Réponses: 14
    Dernier message: 17/06/2005, 16h45
  5. [68000] EXT nombre négatif
    Par fastzombi dans le forum Autres architectures
    Réponses: 2
    Dernier message: 02/05/2004, 12h17

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