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

Delphi Discussion :

Hresult & Delphi


Sujet :

Delphi

  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut Hresult & Delphi
    bonjour à tous,

    j'utilise des fonctions situées dans une librairie externe, et je dois gérer les codes retournés par ces fonctions. Il est dit que ces fonctions retournent un HRESULT... j'ai vu que ce type était longint, mais comment ça s'utilise ?

    Si je fais :

    var
    err : hresult;
    begin
    err := mafonction();

    à la compil j'ai : [Erreur] Types incompatibles : 'HRESULT' et 'procedure, untyped pointer or untyped parameter'

    comment faut-il faire ?
    Merci de vos explications ...

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Qu'est ce que "MaFonction" ?!? une methode a toi ?

    [Edit] En plus tu as pas mis de parametres a ta fonction ....
    En pascal, une fonction/Procedure vide n'a pas de parenthese.

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut
    mafonction est la fonction externe que j'appelle. En fait je dois passer un entier, donc ce serait mafonction(0) par exemple.
    Ce sont des fonctions qui se trouvent dans un activex (J'ai importé la bibliothèque de types) et ça marche très bien, sauf que je ne sais pas récupérer les codes d'erreurs éventuels.

    euh suis-je plus clair ?

  4. #4
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Tout a fait.
    PAr contre, MaFonction est une fonction visiblement ici.
    Or a mon avis ca doit etre une methode de classe ... sinon je ne voit pas d'erreur particuliere.

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut
    Mais oui tu as raison !!! ma description est fausse
    En fait j'appelle une fonction d'un objet COM

    err := ObjetCom.Fonction(0);

    et c'est ça qui déclenche l'erreur à la compil :
    Types incompatibles : 'HRESULT' et 'procedure, untyped pointer or untyped parameter'

    Bon, là c'est plus clair ! Alors qu'estce qui ne va pas, ou plutot qu'est ce que je n'ai pas compris ?

  6. #6
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Envoie la definision complete de la fonction et le code exact d'appel

  7. #7
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut
    Dans la doc de l'objet COM : Procedure décrite pour VC++ (que je ne connais pas)

    HRESULT Sign(short nFlag);
    Signe le fichier contenu dans l'objet XDocument
    • nFlag indique si on attache un jeton d’horodatage et/ou u
    signature.

    dans le wrapper de composant généré par delphi la procedure est :
    procedure Sign(nFlag: Smallint);

    dans mon programme, j'ai donc une form sur laquelle j'ai mis le composant mis à dispo par le wrapper.
    J'appelle alors la procédure par
    xdocument1.Sign(0);
    et ça fonctionne bien, (le document chargé dans le composant est signé, puisque c'est le boulot de la procédure en question) sauf que s'il ya un problème, je ne sais pas le code d'erreur retourné par la procédure... voilà voilà

  8. #8
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Ben .... vu comme ca ... ya pas de code d'erreur retourné

    Vu que Procedure ne renvoit rien ..... Fucntion oui mais pas Procedure

    Donc 2 solution : Soit, ta doc date un peu ... soit Delphi a foiré son wrapper.
    Ce qui arrive (il parrait) assez souvent.

    Je regarderais plutot du cote de l'interface associé a ce composant.
    en general, c'est le meme nom mais avec un "I" au lieu du "T"
    Si la fonction est bien une Fucntion alors c'est que Delphi a foirer son import.

    Je te conseille de ne pas generer le wrapper de composant (decocher la case en bas lors de l'import) et de traiter directement via l'interface adequate que l'on charge avec "coXXXX.Create" ou XXXX est le nom de ta classe.

  9. #9
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut
    Effectivement je comprends que je n'ai pas de retour....
    Bon ça me dépasse un peu, je vais laisser mûrir quelques heures.

    Merci de ton aide en tout cas.

  10. #10
    Membre éclairé
    Homme Profil pro
    Responsable associatif
    Inscrit en
    Octobre 2005
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable associatif

    Informations forums :
    Inscription : Octobre 2005
    Messages : 229
    Par défaut
    Il semble bien que le probleme ne vient pas du wrapper, mais plutot de l'interface... j'ai bien un procedure et non pas une fonction dans l'interface...

  11. #11
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Dans ce cas, essaye de faire marcher ton application via la procedure (donc sans retour d'erreur) et de voir si tout marche bien.

    si oui, ya des chances pour que ce soit ta doc qui date un peu

    Bon tu peux toujours essayer de remplacer la procedure par une fonction et voir si ca reagit bien, ce qui sous entendrais une erreur de recuperation mais j'en doute.

    Sinon il se peux que ta doc soit acces C/C++ donc sous forme de librairie plus ou moins statique, avec manipulation des classes directement.

    Or sous Delphi il te faut une version COM de la Dll pour dialiguer avec elle, ce qui suppose le developpement de classes specifique dont une application C/C++ peut se passer.
    Dans ce cas, le systeme de gestion est peut etre autre ....

    Il est possible que le wrapper ait generé des evenements executés en cas d'erreur (ie OnError par exemple).
    Ou qu'une methode du type GetErrorValue soit propose pour recuperer les erreurs suite a un appel ....

    Tout peut etre envisageable

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 21h09
  2. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 23h50
  3. Réponses: 4
    Dernier message: 27/03/2002, 12h03
  4. Réponses: 2
    Dernier message: 21/03/2002, 00h01

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