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

Lazarus Pascal Discussion :

Syntaxe d'un wrapper Pascal sous Linux


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Syntaxe d'un wrapper Pascal sous Linux
    Bonjour à toutes et à tous,

    Je voudrais écrire (parce que je n'en trouve pas) un wrapper pour certaines fonctions vidéo sous LINUX.

    Sous Windows, par exemple, dans le wrapper AVIFile32.pas, il y a des instructions du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function  AVIFileInfo(pFile: PAVIFile; var afiInfo: TAVIFileInfo; lSize: LongInt): LongInt stdcall; external 'AVIFil32.dll';
    qui donnent accès aux fonctions de la dll AVIfil32.dll

    Supposant que j'ai des fichiers équivalents à cette dll (fichiers .so je suppose) sous Linux, comment écrire un wrapper pour ce fichier. Quelle syntaxe utiliser.

    Merci pour votre aide.

    Pierre

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Par défaut
    Le wrapper pour Linux va s'écrire comme celui sous windows a 2 petits détails près : le nom de la bibliothèque et la convention d'appel vont changer.

    Pour le nom de bibliothèque on peut utiliser une constante dont la valeur change en fonction de l'OS. Pour la convention d'appel c'est un peu plus compliqué. Sous linux la convention d'appel sera probablement toujours cdecl. Sous windows il semble qu'elle puisse varier en fonction des DLL.

    Un petit exemple de ce que l'on peut faire :
    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
     
    unit Wrapper;
     
    interface
     
    const
    {$ifdef WINDOWS}
      mylib = 'toto.dll';
    {$else}
      mylib = 'toto-1.0.so';
    {$endif}
     
    function  AVIFileInfo(pFile: PAVIFile; var afiInfo: TAVIFileInfo; lSize: LongInt): LongInt; 
    {$ifdef WINDOWS} stdcall {$else} cdecl {$endif}; external mylib;
     
    implementation
     
    end.
    Il existe aussi la directive {$CALLING xxxxxx} pour spécifier globalement la convention d'appel. Je ne l'ai encore jamais testée mais elle doit permettre de simplifier l'exemple du dessus.

    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
     
    unit Wrapper;
     
    interface
     
    const
    {$ifdef WINDOWS}
      mylib = 'toto.dll';
      {$calling stdcall}
    {$else}
      mylib = 'toto-1.0.so';
      {$calling cdecl}
    {$endif}
     
    function  AVIFileInfo(pFile: PAVIFile; var afiInfo: TAVIFileInfo; lSize: LongInt): LongInt; 
    external mylib;
     
    implementation
     
    end.
    PS : une doc qui explique comment interfacer du pascal avec du C => ftp://ftp.freepascal.org/pub/fpc/doc...FreePascal.pdf

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci batyann811 pour ces informations.

    Quelle est l'utilité d'avoir un nom de librairie différent selon l'OS ?

    J'avais déjà vu l'article dont tu me donnes le lien, mais sous une autre forme. Je vais lire celui-ci qui semble plus complet, mais a priori, il y a pas mal de choses que je ne comprends pas, je reposerai des questions.

    Cordialement.

    Pierre

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Quelle est l'utilité d'avoir un nom de librairie différent selon l'OS ?
    C'est uniquement parce que les bibliothèque ont des noms différents en fonction de l'OS (en particulier l'extension).

Discussions similaires

  1. [Free Pascal] Free Pascal sous Linux
    Par icare_est dans le forum Free Pascal
    Réponses: 16
    Dernier message: 06/10/2010, 23h13
  2. Pascal sous Linux : que choisir ?
    Par pasteque dans le forum Pascal
    Réponses: 9
    Dernier message: 21/06/2006, 17h02
  3. [FreePascal] Pascal sous Linux
    Par Gnux dans le forum Free Pascal
    Réponses: 9
    Dernier message: 08/10/2005, 19h01
  4. [Lazarus] Editeur Pascal sous Linux
    Par jlambert dans le forum Lazarus
    Réponses: 3
    Dernier message: 05/02/2004, 12h32
  5. [Kylix] Pascal sous Linux !
    Par macluvitch dans le forum EDI
    Réponses: 3
    Dernier message: 17/11/2003, 01h39

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