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 .NET Discussion :

Appeler une fonction présente dans une dll


Sujet :

Delphi .NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 46
    Points
    46
    Par défaut Appeler une fonction présente dans une dll
    Bonjour,

    Je souhaiterai appeler une fonction présente dans une dll que j'ai moi même coder et non une dll Win32.

    Avez-vous des informations pour cela?

  2. #2
    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 : 54
    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 430
    Points
    28 430
    Par défaut
    Citation Envoyé par beni34 Voir le message
    Bonjour,

    Je souhaiterai appeler une fonction présente dans une dll que j'ai moi même coder et non une dll Win32.

    Avez-vous des informations pour cela?
    c'est très simple, le mot clé External permet d'indiquer que la fonction se trouve dans la dll indiquée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    function NomFonction(...):...; external 'madll.dll';
     
    begin
      NomFonction(...);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    Je developpe en delphi prism et je ne croi pas que cette syntaxe est supporté. Aprés le external il semble que je ne puisse pas mettre de chaine de caractère.

  4. #4
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Points : 460
    Points
    460
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait !

  5. #5
    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 : 54
    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 430
    Points
    28 430
    Par défaut
    Citation Envoyé par beni34 Voir le message
    Je developpe en delphi prism et je ne croi pas que cette syntaxe est supporté. Aprés le external il semble que je ne puisse pas mettre de chaine de caractère.
    Delphi Prism n'est pas Delphi ni Delphi.Net

    Il faut passer par un DLLImport mais l'aide sur le Wiki n'est pas très utile.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    J'ai essayé avec le DllImport mais sans succés.
    J'ai une erreur du typ: EntryPointNotFoundException.
    Mais le but c'est d'appeler une methode d'une dll en dynamique.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    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 452
    Points : 24 863
    Points
    24 863
    Par défaut
    external, tu peux oublier, c'est statique !

    Tu parles d'une fonction ?
    N'est-ce pas plutôt une méthode ?


    Tu es l'auteur de l'Appelant et de la DLL
    Les deux seront en .NET ? ou l'une des parties sera en Win32 ?

    Comme le fait remarqué Paul Toth, il existe trois produits
    - Delphi : Win32 (... euh Chimpenfeu va nous abolir cela !)
    - Delphi.NET : Intégration du .NET dans l'IDE Delphi 8 à 2007, c'est une encapsulation par CodeGear
    - Delphi Prism : Plugin apportant le langage Delphi comme véritable langage .NET au sein Visual Studio

    Tu es bien dans Visual Studio ?
    Si oui, c'est bien Delphi Prism, ce qui est nettement mieux que Delphi.NET même si cela n'apporte rien par rapport au C# !
    Et dans ce cas, pense à préciser [PRISM] dans le sujet, car la communauté ici s'attend à l'ancien Delphi.NET

    Si mélange Win32 / .NET
    Je ne connais pas Delphi.NET mais comme en C# tu dois pouvoir assurer que ton objet supporte l'Automation (option d'InterOp), ainsi tu pourras enregistrer ta DLL comme une bibliothèque de Type (en plus d'être une Assembly)
    Je ne l'ai pas fait moi même, mais j'ai utilisés des DLL nommés MonObjet.InterOp.DLL qui exposait la TLB et utilisant en interne l'assembly de MonObjet.DLL écrite en VB.NET

    Ensuite, c'est du COM, cela reste transparent du côté appelant

    Tu peux oser le CrossTalk si tu veux utiliser une Assembly en Win32

    Si pure .NET (des deux côtés)
    Il faudrait pousser plus loin la techno .NET
    Comme tu utilises Delphi Prism, tout est ouvert, cet exemple C# devant être adaptable :
    Développer une application Windows en .NET de façon modulaire
    Tu dois pouvoir utiliser les Assembly du Framework qui permet de charger dynamiquement des Assembly (installées)
    Même en Delphi.NET cela semble possible : Utilisation des AppDomain en .NET, donc cela sera encore en Delphi Prism !





    DllImport c'est justement .NET appelant DLL Win32, si tu n'as pas fait une DLL Win32, il est logique que cela ne fonctionne pas !

    FAQ Delphi.NET - Comment puis-je appeler une fonction présente dans une DLL win32 ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2013, 20h49
  2. appeler une fonction php dans une fonction javaScript
    Par geeksDeve dans le forum Langage
    Réponses: 3
    Dernier message: 17/04/2012, 15h30
  3. Réponses: 4
    Dernier message: 24/08/2011, 18h23
  4. Réponses: 10
    Dernier message: 14/03/2009, 13h36
  5. Réponses: 1
    Dernier message: 25/10/2007, 21h25

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