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 :

Dll Delphi 5 et appel VB


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Dll Delphi 5 et appel VB
    Bonjour,
    Je dois utiliser à partir de Vb (ou Access) la fonction suivante d'une Dll
    Delphi 5 :
    function algo(data0,data1,data2,data3,data4:pchar):pchar;

    Pour cela je déclare selon :
    Public Declare Function algo Lib "Algo.dll" (ByVal data0 As String, ByVal
    data1 As String, ByVal data2 As String, ByVal data3 As String, ByVal data4 As
    String) As String

    Avec l'appel :
    Dim MyStr$
    MyStr$ = algo("1", "a", "b", "c", "d")

    Ce qui provoque un plantage !!
    Que dois-je corriger dans mon appel ???
    Faut-il avoir "stdcall" à la fin de la fonction ?

    D'avance merci
    Flexio

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Avant tout, bienvenue sur Developpez.

    Personnellement j'essai de ne pas retourner de string
    via mes fonctions qui sont dans une DLL.

    J'essaie de faire comme les API de windows et j'inclus dans
    mes parametres de function, une valeur de sortie.

    donc pour ton exemple, je ferais ainsi:

    Code Delphi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //==============================================================================
    //=== Fonction ===
    //==============================================================================
    function AlgoFunc(data0,data1,data2,data3,data4,lpBufferResult:pchar):DWORD;stdcall;
    begin
      result:=0;
      if Data0='bonjour' then
      begin
        StrCopy(lpBufferResult,'allo');
        result:=1;
      end;
     
    end;

    Declaration et utilisation dans vb
    (ici VBA dans excel)
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Public Declare Function AlgoFunc Lib "Algo.dll" (ByVal data0 As String, ByVal _
    data1 As String, ByVal data2 As String, ByVal data3 As String, ByVal data4 As _
    String, ByVal lpBufferResult As String) As Long
     
     
    Sub test()
      Dim Result As String
      '== Prepare assez de place pour recevoir une reponse... =='
      Result = String$(255, 0)
      Debug.Print AlgoFunc("bonjour", "2", "3", "4", "5", Result)
      Debug.Print Result
    End Sub

    Dans la fenetre de debug je vois le text suivant:
    C'est selon moi la meilleur façon de procéder...
    et ça reste une simple opinion personnel.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut suite
    Bonjour et merci pour l'accueil et la réponse.

    Malheureusement je n'ai que le code source et la dll compilée mais pas les outils de dev pour corriger et recompiler.

    Finalement, en l'état sans "stdcall" en fin de fonction ai-je un espoir de pouvoir l'appeler via VB ou Access ?

    D'avance merci.

    Flexio

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Selon moi, une fonction Delphi qui retourne une string et qui est dans une DLL
    peut seulement être utilisée que par un autre programme Delphi.

    Et il y a plusieurs raison à cela...
    La principale étant que VB,C ou Delphi, tous ces langages traite les
    chaînes de caractères de façon différente et il est impossible au moment
    de la compilation de la DLL de savoir à qui on a affaire.

    Lorsqu'on veut utilisé les chaînes de caractères, on doit alloué un morceau
    de la mémoire, et éventuellement le libérer. Encore une fois, d'un langage à
    l'autre, ça ce passe de façon différente. C'est pourquoi habituellement, le
    programme qui appelle une fonction dans une DLL doit allouer lui même
    l'espace mémoire et passer un pchar (pointeur de caractères) à la fonction.
    Le programme qui appèle ainsi la fonction sera à quelle moment et de quelle façon libérer la mémoire qui contient une série de caractères.

    Donc, à moins que tu ne trouve quelqu'un pour faire la modification de la DLL
    (puisque tu as le code source) ou tu traduis cette fonction en VB pour
    éliminer la DLL... je crois que tu est coincé.

    donc
    Citation Envoyé par flexio2
    ai-je un espoir de pouvoir l'appeler via VB ou Access ?
    Non. Désolé.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Par contre, si ton Algo n'est pas top secret,
    je pourrait peut-être te la recompiler.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Une fois de plus merci pour toutes ces infos.
    Je vais essyer de réécrire l'algo en VB.
    Si je n'y arrive pas je veux bien une recompile du code.

    Flexio

Discussions similaires

  1. Appel d'une DLL Delphi en C#
    Par joc02 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 14/05/2009, 16h25
  2. Appel DLL delphi depuis C#
    Par joc02 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 14/05/2009, 16h23
  3. Réponses: 17
    Dernier message: 27/04/2007, 11h06
  4. Probleme DLL delphi, appels aux fonctions
    Par bouzaidi dans le forum Delphi
    Réponses: 4
    Dernier message: 11/04/2007, 14h04
  5. Réponses: 4
    Dernier message: 01/06/2006, 15h55

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