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

Free Pascal Discussion :

Passage d'une chaîne de caractères à une routine C


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Par défaut Passage d'une chaîne de caractères à une routine C
    j'essaie depuis plusieurs jours de passer une chaîne de caractères à une routine C mais j'ai toujours un problème de type.

    j'ai lu l'indispensable doc ici :
    http://mirror.mirimar.net/freepascal...FreePascal.pdf

    et j'ai cru comprendre que la solution à mon problème se trouve dans l'unité CTypes, mais je n'arrive à trouver aucune documentation sur cette unité ni sur sa localisation.

    Quelqu'un pourrait-il m'éclairer sur le sujet ?

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Il n'y a pas forcément besoin de l'unité CTypes.

    Peux-tu poster le code :
    - du source C (si tu le possèdes);
    - de la partie déclarations ainsi que de l'appel de la routine C dans le source Pascal ?

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    A toutes fins utiles, voici les types déclarés dans l'unité CTypes (mais il doit en manquer quelques uns) :
    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
    type cInt8 = ShortInt;
         cUInt8 = Byte;
         cUInt16 = Word;
         cInt16 = SmallInt;
         cInt32 = LongInt;
         cUInt32 = cardinal;
         cInt64 = Int64;
         cUInt64 = qword;
         cuchar = Byte;
         cchar = ShortInt;
         cInt = LongInt;
         cUInt = Cardinal;
         cLong = LongInt;
         cuLong = Cardinal;
         clonglong = Int64;
         culonglong = qword;
         cshort = SmallInt;
         cushort = Word;
         pcInt = ^cInt;
         pcUInt = ^cUInt;
         pcLong = ^cLong;
         pculong = ^cuLong;
         pcshort = ^cshort;
         pcushort = ^cushort;
         pcchar = ^cchar;
         pcuchar = ^cuchar;
         cunsigned = cUInt;
         pcunsigned = ^cunsigned;
         cFloat = Single;
         cDouble = Double;
         clDouble = Extended;
         pcFloat = ^cFloat;
         pcDouble = ^cDouble;
         pclDouble = ^clDouble;
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    Triduele, c'est la deuxième fois que tu cite le meme article, et tu ne comprend clairement pas du tout ce qui y est expliqué...
    l'auteur ne fait que décrire la façon d'appeler une fonction définie dans une librairie...
    Il t'induit en erreur en te laissant penser que tu vas utiliser du code C... c'est absolument faux!!!

    Une librairie est un fichier compilé, donc un fichier qui n'a plus rien a voir avec le langage utilisé au départ... Son utilité est de mettre à disposition du programmeur un ensemble de fonctions...

    Il se trouve que 99,99 des librairies de linux sont faites en C avant compilation, mais elles pourraient avoir été codé en assembleur ou pascal que celà ne changerait rien!!!

    A aucun moment tu n'incluras du C dans ton programme, tu te contenteras d'appeler une fonction depuis une librairie, qui à ce moment là peut-etre considérée comme un autre programme, mais dont tu n'est pas l'auteur...

    Sous windows celà revient à appeler une fonction dans une dll...
    C'est ce que tu fais si tu utilises l'API windows, qui n'est qu'un ensemble de fonctions contenues dans des dll bien précises...

    Pour pouvoir utiliser une fonction incluse dans une dll, il faut que cette dernière soit lancée en memoire (chargée)...

    Tu peux demander au systeme de la charger en memoire à l'aide de l'utilitaire regsvr32.exe fourni avec windows, ou bien la charger dynamiquement...

    j'ai ecrit il y a quelques temps (dans un cadre un peu différent) un petit tutoriel sur l'utilisation dynamique des dll...
    tu pourras le lire là :
    http://clandestino000.free.fr/tutdll2.htm

    PS : N'essaie pas de trouver des librairies ayant le meme nom sous win et sous X, il n'y a aucune raison logique pour que celà arrive...

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    De mon côté, j'avais plutôt compris qu'il s'agissait d'un fichier .o écrit en C, à lier au projet Pascal ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Par défaut délais+réponse
    Bonjour,

    désolé pour le très long délais.

    Un des points délicats quand on cherche à transférer des données d'un code écris en FPC à une librairie codée dans un autre langage (le C par exemple) est la conversion correcte de types. L'unité CTypes est utile pour utiliser des types compatibles avec le langage C de façon aussi indépendante que possible d'un compilateur ou d'un système particulier. Cette unité se trouve dans la RTL dans le sous-répertoire inc ($fpcsrc/rtl/inc).

    Concernant les pointeur vers de chaîne de caractères C, le type recommandé est pcchar. Le type Free Pascal PChar est compatible également. La conversions suivantes est acceptables:

    pcchar(PChar('ma chaine'))

    Je compte revoir le texte cité plus haut avec l'aide des contributeurs du Free Pascal. Il faut simplifier l'accès aux méthodes C++, préciser le comportement des pointeurs, etc. J'aimerais également faire un tutoriel d'utilisation de h2pas. Malheureusement, j'ai encore du mal à en maîtriser le fonctionnement.

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/05/2015, 09h11
  2. [WD20] Une petite embrouille avec une chaîne de caractères
    Par JohnVist dans le forum WinDev
    Réponses: 10
    Dernier message: 29/01/2015, 15h20
  3. Réponses: 9
    Dernier message: 28/01/2015, 11h53
  4. Recherche d'une sous-chaîne complète dans une chaîne de caractères
    Par missmiss89 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 06/07/2011, 16h26
  5. convertir une chaîne unicode en une chaîne ascii
    Par kawther dans le forum MATLAB
    Réponses: 4
    Dernier message: 09/09/2009, 15h50

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