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 :

conversion type C


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut conversion type C
    Bonjour,

    Galérant toujours pour utiliser une dll ecrite en C, je m'y perd dans les types...

    unsigned char
    unsigned long
    char
    char nomdemavariable[longueur]
    unsigned char nomdemavariable[longueur]
    Ma dll doit me renvoyer une structure contenant une quinzaine d'éléments avec tous ces types.
    Elle plante donc je suppose que mes types a moi ne sont pas bons..
    unsigned char : longword ?
    unsigned long : longword ?
    char : byte ?
    char nomdemavariable[longueur] : array of byte ?
    unsigned char nomdemavariable[longueur]
    Bref, merci pour toute vos lumières

  2. #2
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    unsigned char -> j'ai un trou là

    unsigned long -> cardinal

    char -> char

    char tableau[long] : tableau : array[0..long] of char
    (oui il y a bien long+1 elements)

    (je n'ai l'expérience que de D5, je ne sais pas si c'est valide pour les versions suivantes)

  3. #3
    Membre averti
    Avatar de delphichem
    Inscrit en
    Octobre 2002
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 280
    Points : 338
    Points
    338

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Ma stucure est la suivante :
    typedef struct {
    unsigned long id; // Template Id number
    unsigned long employee_id; // Optional Employee Id
    unsigned long password; // Optional administration pass
    unsigned char sensor_version; // specifies sensor type/version // (Do not alter)
    unsigned char template_version; // Specifies template version (Do not alter)
    char name[16]; // optional name unsigned
    char finger; // finger enrolled (0-9 is left pinky to // right pinky)
    unsigned char admin_level; // Administration Privileges
    unsigned char schedule; // Optional template use schedule // (not implemented)
    unsigned char security_thresh; // Template specific security level
    unsigned char noise_level[18]; // Noise Level (DO NOT ALTER VALUE)
    unsigned char corramb[NUM_CORE]; // Core Stats (DO NOT ALTER VALUE)
    unsigned char ihcore[NUM_CORE]; // Horizontal core locations (DO NOT ALTER // VALUE)
    unsigned char ivcore[NUM_CORE]; // Vertical core locations (DO NOT ALTER // VALUE)
    unsigned char temp_xoffset; // (DO NOT ALTER VALUE)
    unsigned char temp_yoffset; // (DO NOT ALTER VALUE)
    unsigned char index; //Template Index (refers to a specific instance of an ID)
    unsigned char }
    BII_Template;
    En remplacant par les bons types, toujours un plantage....
    Peut-etre l'appel de la function :
    définie en C :
    int Get_Template(unsigned int template_number, int template_index, BII_Template* the_template)
    traduit en delphi par
    function Get_Template(template_number : integer;template_index:integer;BII_template:TDoigt):integer; cdecl;external 'Ma_00.DLL';

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par oceane
    function Get_Template(template_number : integer;template_index:integer;BII_template:TDoigt):integer; cdecl;external 'Ma_00.DLL';
    Au lieu de cdecl, un stdcall serait peut être mieux

    et comment t'as traduit TDoigt ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Effectivement, avec stdcall la function passe mais maintenant me donne un message d'erreur me disant que le template passé n'a pas la stucture attendue...

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    pour aider un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Mettre windows dans les uses de l'unité
     
    C: unsigned long => D: ULONG
    C: unsigned char => D: UCHAR
    C: char => D: Char
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    surtout que ce doit etre un pointeur sur la structure et non la structure a passer

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    ok, j'ai passé un passé un pointeur sur ma structure
    Visiblement c'est toujours un probleme sur ma structure
    PDoigt =^TDoigt;
    Tdoigt = record
    ID : cardinal ;
    employee_id : cardinal;
    password : cardinal;
    template_version : Byte;
    name : array[0..15] of char;
    finger : Byte;
    admin_level : Byte ;
    schedule : Byte;
    security_thresh : Byte ;
    noise_level : array[0..17] of Byte ;
    corramb : array[0..2] of Byte ;
    ihcore: array[0..2] of Byte ;
    ivcore:array[0..2] of Byte ;
    temp_xoffset : Byte;
    temp_yoffset : Byte ;
    index : char;
    inphase: array[0..347] of Byte ;
    End ;
    et j'appelle mafonction
    function Get_Template(template_number : integer;template_index:integer;BII_templateDoigt):integer; stdcall;external 'Ma_00.DLL';
    mes doutes se portent sur
    char name[16]; ==> name : array[0..15]of char
    unsigned char ihcore[NUM_CORE]; ==> ihcore: array[0..2] of Byte ;(num_core=3)
    d'après veloce il faudrait dans les 2 cas [0..long]
    d'après le lien de delphichem : [0..long-1][/quote]

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par oceane
    d'après veloce il faudrait dans les 2 cas [0..long]
    d'après le lien de delphichem : [0..long-1]
    [/quote]

    Oup's, j'ai été un peu vite dans mon premier post

    effectivement, c'est [0..long-1]

    une erreur pareille mérite assurément une flagellation sur la place publique

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    po grave de toute façcon j'ai essayé les 2....
    et ca ne règle pas le probleme.
    Toujours le même message d'erreur de ma dll qui me dit que la structure passée n'est pas supportée par la version
    ...sachant que je suis en parallele avec les développeurs (en C) de la dll qui m'assurent que c'est la bonne version....

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut


    dans ta structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      inphase: array[0..347] of Byte ;
    correspond a quoi dans le code c ?

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  13. #13
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    je sais que je vais dire une betise
    mais avant d'apllé votre fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function Get_Template(template_number : integer;template_index:integer;BII_template:PDoigt):integer; stdcall;external 'Ma_00.DLL';
    tu fait pas quelque chose de genre
    ???
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    int Get_Template(unsigned int template_number, int template_index, BII_Template* the_template)
    function Get_Template(template_number : integer;template_index:integer;BII_template:TDoigt):integer; cdecl;external 'Ma_00.DLL';
    Il ne faudrait pas mettre plutot en delphi :

    function Get_Template(template_number : integer;template_index:integer;var the_template:TDoigt):integer; cdecl;external 'Ma_00.DLL';
    ??
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Pour répondre à Anapurna :
    unsigned char inphase[PACKED_ARRAY_SIZE];
    Pour Edan : Oui j'ai fait un new(BII_template)

    Pour Malatar : J'ai modifié la déclaration car la dll attend un pointeur sur une structure donc je lui passe un pointeur sur ma structure

    BII_Template* the_template
    BII_Template : PDoigt (ou j'ai type Tdoigt = record ....end; Pdoigt=^Tdoigt
    Et toujours ma même erreur 'Le template passé n'est pas supporté par la version'

    Je vais donc retourner du coté de la version de la dll et du firmware

    Merci encore a tous pour vos conseils

  16. #16
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    une question: integer de c est sur 32 ou 16 bits comme vb??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Je ne connait pas VB...

    Par contre j'avance...

    Ma dll attend un pointeur sur une structure...
    au lieu de faire :
    Tdoigt = record ....end;
    Pdoigt=^Tdoigt
    ...
    var pointsurmastruct : Pdoigt;
    begin
    new(pointsurmastruct);
    Appel_de_ma_fonction(pointsurmastruct);
    ce qui ne marche pas du tout, je fais
    Tdoigt = record ....end;
    ...
    var mastruct : Tdoigt;
    begin
    Appel_de_ma_fonction(@pointsurmastruct);
    et la ca passe !!!

    Bon évidement tout n'est pas encore bon
    Ma fonction renvoie un code retour

    function ma_fonction (...):integer; stdcall ;external 'ma_V1100.DLL'
    donc je récupère bien ma valeur de retour, mais des que je veux l'afficher dans un Tlabel ou un showmessage ca plante
    result := Appel_de_ma_fonction(@pointsurmastruct);
    showmessage(inttost(result)); // passe mais genere un plantage total

    result := Appel_de_ma_fonction(@pointsurmastruct);
    label1.caption := inttost(result)); // passe mais genere un plantage total

    result := Appel_de_ma_fonction(@pointsurmastruct);
    if result>2 then
    label1.caption := '1234'// passe
    Donc Comment (et pourquoi éventuellement) éviter ce pb ?
    Quand la fonction me renvoie 0 ou 1 , ok je fais avec mais si par exemple elle doit me renvoyer un nombre de transactions ???

  18. #18
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Result est un mot reservé au niveau des fonctions en delphi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function Test : Boolean;
    begin
      Result := True;
      try
        // traitement;
      Except on Exception
        Result := False;
      end;
    end;
    Equivaut à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fucntion test : boolean;
    begin
      try
        // traitement
       Test := True;
      Except on Exception do
        Test := False;
      end;
    end;
    Essaie avec une autre variable

    PS: inttost c'est une erreur de frappe ?[/code]
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    j'ai posé la question
    parceque je ne trouve pas
    unsigned char inphase[PACKED_ARRAY_SIZE];
    dans cette declaration

    typedef struct {
    unsigned long id; // Template Id number
    unsigned long employee_id; // Optional Employee Id
    unsigned long password; // Optional administration pass
    unsigned char sensor_version; // specifies sensor type/version // (Do not alter)
    unsigned char template_version; // Specifies template version (Do not alter)
    char name[16]; // optional name unsigned
    char finger; // finger enrolled (0-9 is left pinky to // right pinky)
    unsigned char admin_level; // Administration Privileges
    unsigned char schedule; // Optional template use schedule // (not implemented)
    unsigned char security_thresh; // Template specific security level
    unsigned char noise_level[18]; // Noise Level (DO NOT ALTER VALUE)
    unsigned char corramb[NUM_CORE]; // Core Stats (DO NOT ALTER VALUE)
    unsigned char ihcore[NUM_CORE]; // Horizontal core locations (DO NOT ALTER // VALUE)
    unsigned char ivcore[NUM_CORE]; // Vertical core locations (DO NOT ALTER // VALUE)
    unsigned char temp_xoffset; // (DO NOT ALTER VALUE)
    unsigned char temp_yoffset; // (DO NOT ALTER VALUE)
    unsigned char index; //Template Index (refers to a specific instance of an ID)
    unsigned char }
    BII_Template;

    euh

    rassure moi c'est l'adresse de la structur et pas du pointeur que tu passe la ?
    evite d'utilise le result c'est un mots reserve

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    oui en fait je voulais dire
    Tdoigt = record ....end;
    ...
    var mastruct : Tdoigt;
    begin
    Appel_de_ma_fonction(@mastruct);
    sinon j'ai changé mon result en result1 mais le pb est toujours le meme.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Conversion Types] Comparer des text
    Par pmartin8 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/11/2006, 21h58
  2. Pb conversion type vers Cstring
    Par FamiDoo dans le forum MFC
    Réponses: 6
    Dernier message: 04/08/2006, 09h58
  3. Conversion type JAVA-Oracle
    Par zuzuu dans le forum JDBC
    Réponses: 1
    Dernier message: 23/07/2006, 05h36
  4. Réponses: 5
    Dernier message: 15/11/2005, 08h57
  5. [Crystal reports Version 8.x] Conversion Type chaîne en date
    Par Audrey Stelle dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 22/10/2005, 14h58

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