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 :

Equivalent IntPtr Delphi


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Equivalent IntPtr Delphi
    Bonjour à tous,

    Je travaille en ce moment sur un projet Delphi et j'ai besoin d'utiliser les fonctions d'une DLL écrite en C++.
    J'ai notamment besoin d'utiliser une fonction de cette DLL qui prend comme paramètre un IntPtr, seulement voilà, je ne sais pas avec quel type de paramètre je devrais appeler cette même fonction en Delphi.

    Des idées?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    IntPtr ? C'est du C++ ça on dirait plus du C# ou alors C++/CLI
    Sinon, cela semble être tout simplement void* du C++ ou Pointer de Delphi

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    En C#, au temps pour moi!

    Merci pour ta réponse!

  4. #4
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Sinon, y aurait-il un moyen pour convertir un Pointer en un THandle ?
    (Désolée je suis débutante en Delphi)

  5. #5
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    ou bien pour convertir un Handle en Pointer?

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    C'est surtout que ce n'est pas tout à fait la même chose !

    Pointer c'est une adresse mémoire
    THandle c'est un identifiant Windows (cela peut-être une adresse mémoire ou sa propre tambouille interne)

    Il te faut lire la documentation de cette DLL pour savoir quelle doit être la valeur de ce pointeur !
    Par contre, si tu l'alloue côté Delphi, il ne sera pas du tout managé, possible que le C# ne comprenne pas !

  7. #7
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Dans la documentation de la DLL, je peux lire:

    public static void Fonc1(IntPtr handle) //Cette fonction prend en entrée l'handle de la fenêtre appelante

    Du coup je suis un peu coincée

  8. #8
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Je le traduirai de la sorte, en C la notion de passage par Adresse n'existe pas pas. Je suis tout de même surpris en C# de cette syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure Fonc1(Var Handle:Integer);
    Mais comme le dit ShaiLetroll si ta DLL est une DLL en CLI (.NET) tu ne peux pas l'appeler directement en Delphi.
    Es-tu sûre que la Dll est en C# ? Sans aucune interface C++ ? Si tu avais un exemple dans la doc en C++ on pourra de donner la correspondance beaucoup plus facilement.

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    "handle de la fenêtre appelante" -> TForm.Handle

  10. #10
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Nono40 Voir le message
    Je le traduirai de la sorte, en C la notion de passage par Adresse n'existe pas pas. Je suis tout de même surpris en C# de cette syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure Fonc1(Var Handle:Integer);
    Mais comme le dit ShaiLetroll si ta DLL est une DLL en CLI (.NET) tu ne peux pas l'appeler directement en Delphi.
    Es-tu sûre que la Dll est en C# ? Sans aucune interface C++ ? Si tu avais un exemple dans la doc en C++ on pourra de donner la correspondance beaucoup plus facilement.

    Voici un exemple réalisé en C# utilisant maDll.dll


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      [STAThread]
            public static void Main(String[] args)
            {
                ...
                IntPtr handle;
               ...
               handle = Marshal.StringToHGlobalAnsi(args[i++]);
               maDll.Fonc1(handle);
               System.Environment.Exit(0);
               //Marshal.FreeHGlobal(handle);
               ...    
            }

    En espérant que ça aidera à y voir plus clair.

    En espérant que

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    le plus important aurait été la declaration de maDll !
    C'est une DLL simple, une Assembly ? vérifie si l'option d'InterOp COM est fourni

  12. #12
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est une DLL simple, une Assembly ? vérifie si l'option d'InterOp COM est fourni
    Comment savoir?
    Désolée, je ne me suis mise au Delphi que depuis quelques jours.

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut

    Que racontes-tu ?
    La DLL en C#, c'est du côté C# qu'il faut vérifier le type de DLL générée !

Discussions similaires

  1. Equivalent en Delphi d'un programme non RAD
    Par Alcatîz dans le forum Delphi
    Réponses: 7
    Dernier message: 13/09/2006, 03h43
  2. [Mac] Equivalents de Delphi, Pascal, C, Java, etc ?
    Par cyberjoac dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 02/04/2006, 12h26
  3. Equivalent en Delphi
    Par Mariussy dans le forum Langage
    Réponses: 10
    Dernier message: 15/09/2005, 13h29
  4. Equivalent C -> Delphi des types de variables
    Par jobe dans le forum Langage
    Réponses: 3
    Dernier message: 13/09/2005, 23h21
  5. Réponses: 2
    Dernier message: 11/07/2003, 18h24

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