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 :

Explication de code WinAPI


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    793
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 793
    Points : 505
    Points
    505
    Par défaut Explication de code WinAPI
    Bonsoir

    Toujours dans mes dialogues série.

    J'essaie de passer par des exemples de code en utilisant les API de Windows.

    Voici la fonction que j'utilise pour écrire sur le port série, et qui a où semble avoir un fonctionnement bizarre.

    Si je comprend bien la fonction "WriteFile" ci dessous :
    On stocke la valeur à envoyer dans une variable "Buffer" et on indique le nombre de caractères de la chaine à envoyer dans la variable suivante.

    Je ne comprends pas pourquoi on ne déclare dans la variable buffer que le 1er caractère de la chaine ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function WriteStr(st:string):integer;
    var s:string;
        bytesWritten: DWORD;
    begin
        Result:=0;
        if hComm = INVALID_HANDLE_VALUE then result:=-1
        else
        begin
             if not WriteFile(hComm,st[1], Length(St), bytesWritten, nil) then Result:=-2;
        end;
    end;
    Voici la bizarrerie que je ne comprends pas et que je constate dans la routine ci-dessus.

    Quand j’envoie une chaine, seuls la valeur les caractères impair sont bien envoyés et les valeurs des caractères pair est toujours égal à "0".
    je dois donc faire des envoies caractères par caractères, ce qui me semble pas normal.

    Qu'en pensez vous ?
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 434
    Points : 327
    Points
    327
    Par défaut
    La variable String est de fait depuis un certain temps en réalité une WideString où chaque caractère est codé sur 2 octets pour pouvoir afficher tous les caractères de tourtes la langues possibles.
    Dans ta fonction, tu dois déclarer st : AnsiString pour n'avoir qu'un seul octet par caractère et les caractère à "0" n'existerons plus.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 852
    Points : 13 644
    Points
    13 644
    Par défaut
    Un paramètre non typé est passé par référence. st[1] est traité comme un pointeur sur le premier élément du buffer et le deuxième paramètre donne sa taille.

    La donnée est unicode, donc sur 16 bits. Les caractères sur 8 bits sont alignés avec un 0. Déclare ta variable ansistring si tu ne traites que de l'ANSI.

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    793
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 793
    Points : 505
    Points
    505
    Par défaut
    bonjour

    En effet je ne traite que des caractères sur un octet.

    Merci à vous deux.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

Discussions similaires

  1. Explication de code
    Par sacco dans le forum C
    Réponses: 2
    Dernier message: 13/04/2006, 00h13
  2. Explication de code
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 20/03/2006, 10h58
  3. Shell - Explication de code
    Par claralavraie dans le forum Linux
    Réponses: 13
    Dernier message: 13/01/2006, 17h03
  4. Explication de code - RE
    Par deedoo dans le forum Général Python
    Réponses: 23
    Dernier message: 29/07/2005, 15h00
  5. Explication de code simple
    Par Clad3 dans le forum OpenGL
    Réponses: 3
    Dernier message: 20/03/2005, 12h31

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