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

API, COM et SDKs Delphi Discussion :

Traduction à partir du C


Sujet :

API, COM et SDKs Delphi

  1. #1
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 377
    Points
    11 377
    Billets dans le blog
    6
    Par défaut Traduction à partir du C
    Bonjour,
    Je suppose que le code suivant définit osWriteFile comme une fonction du type indiqué, et d'adresse stockée dans le pointeur pCurrent du 59° élément du tableau aSysCall.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        #define osWriteFile ((BOOL(WINAPI*) HANDLE,LPCVOID,DWORD,LPDWORD, \ LPOVERLAPPED))aSyscall[58].pCurrent)
    J'ai également une petite difficulté avec le prototype de la fonction, notamment le dernier paramètre (optionnel ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    osWriteFile = function(hFile: Handle; Buf: PByteArray; Size: Cardinal; var Written: Cardinal; var AsynchronousOps: OverLapped = nil ): LongBool; cdecl;
    Et que vient faire là le WINAPI* ?

    Je ne dois pas être trop loin de l'idée, mais autant ne pas faire de boulette !

    [EDIT] Question subsidiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct winFile {
      const sqlite3_io_methods *pMethod; // Pointer = 4
      sqlite3_vfs *pVfs;     // Pointer = 4
      HANDLE h;            // Pointer = 4 
      u8 locktype;        // Unsigned8Bits ? = 1  
      short sharedLockByte;  // Byte = 1  
      u8 ctrlFlags;       // Unsigned8Bits ? = 1    
      DWORD lastErrno;   // Cardinal = 4   
      winShm *pShm;       // Pointer = 4   
      const char *zPath;   // Pointer = 4
      int szChunk;   // int = 4
    }
    Cette structure occupe 36 octets : peut-il y avoir en C un alignement pair sur les mots pour les champs octets, expliquant que 3 octets en occupent 8 ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 665
    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 665
    Points : 25 459
    Points
    25 459
    Par défaut
    WINAPI c'est la convention d'appel justement donc pas cdecl mais __stdcall (en C++builder) donc stdcall en Delphi

    Pour le struct, packed en Delphi permet de retirer l'alignement, même principe en C++Builder a8 ou -a-

    Ensuite, tu dois en 32 bits, vu tes pointeurs à 4
    En win64, ils seront évidemment à 8 !
    De plus, les conventions d'appel seront purement et simplement ignorés, cela simplifie grandement la vie ! non ?

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 377
    Points
    11 377
    Billets dans le blog
    6
    Par défaut
    Merci, belle boulette sur la convention !!!

    Pour la structure, je pense (d'après Google) qu'il y a en C sous x86 32 bits un alignement pair => j'ai paddé à la main dans un packed record pour pouvoir caler les octets où je voulais.
    Mais ça reste à vérifier...

    Je travaille pour ça sous Lazarus 32 bits.

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

Discussions similaires

  1. Traduction à partir du C
    Par tourlourou dans le forum Langage
    Réponses: 2
    Dernier message: 23/08/2012, 20h48
  2. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  3. Réponses: 1
    Dernier message: 01/08/2002, 21h09
  4. Réponses: 3
    Dernier message: 12/06/2002, 19h03
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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