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

Windows Forms Discussion :

Utiliser une DLL en Delphi avec Visual Basic


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Utiliser une DLL en Delphi avec Visual Basic
    Bonjour,

    J'ai récupéré une DLL en Delphi dont je voudrais utiliser les fonctions avec Visual Basic.
    Le problème c'est que je travaille sur Visual Studio 2005 et que je n'arrive pas à exploiter cette dll.
    Lors de l'appel à une fonction, un message d'erreur me dit que la dll est introuvable. De même, il m'est impossible de l'ajouter parmi les références du projet car elle est soit "introuvable" soit "non compatible".
    Pourtant le fichier est bien dans le répertoire de mon projet que j'ai ajouté dans les chemins d'accès aux bibliothèques dans les options de Visual.

    Quelqu'un pourrait-il m'aider ?

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    La dll Delphi est une dll native (en général Delphi <= 7) ou managée ?
    Si c'est une dll native ton seul moyen d'y accéder sera par des PInvoke et je pense que c'est le cas dans lequel tu es.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    A vrai dire je ne sais pas trop ...
    C'est mpusbapi.dll, soit un driver pour contrôler un PIC en USB.
    Mais j'ai réussi à résoudre mon problème en plaçant le fichier de la dll dans System32...
    Je n'ai toujours pas compris pourquoi ça marchait mieux mais mon problème est résolu !
    Merci quand même pour cette réponse rapide

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 205
    Points : 28 126
    Points
    28 126
    Par défaut
    Citation Envoyé par jix69 Voir le message
    Je n'ai toujours pas compris pourquoi ça marchait mieux mais mon problème est résolu !
    Si tu ne donne pas de chemin à ta dll dans ton projet, celle-ci doit etre dans le même répertoire que l'executable (Bin/Debug ou Bin/Release) suivant ta config.

    Si tu l'as inclue dans ton projet, tu sélectionne le fichier dans l'arborescence, et tu modifie la propriété "Copier dans le dossier de sortie" pour que ta dll soit copier avec l'exe lors de la génération de la solution.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Mais je pensais que dès l'instant où l'on a spécifié le répertoire dans lequel le fichier est présent, il devrait le trouver, non ?
    Et quelqu'un aurait-il une idée pour la correspondance d'un PWORD et d'un Pointer (Delphi) en VB ?
    Merci beaucoup pour vos réponses

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 205
    Points : 28 126
    Points
    28 126
    Par défaut
    Tout dépend de ton instruction Declare dans ton code (si c'est bien cette méthode là que tu utilise)

    Soit tu indique un chemin pour la dll, et effectivement la dll doit se trouve à l'endroit indiqué (attention aux chemins relatifs, qui seront relatifs depuis l'endroit ou se trouve l'executable, et non pas celui du projet)

    Soit tu n'indique pas de chemin, juste le nom du fichier, dans ce cas la dll doit se trouver dans l'un des chemins suivants (dans l'ordre de recherche)
    - Dossier de l'executable
    - Dossier Windows
    - Dossier Système (System32)
    - Dossiers de la variable d'environnement Path dans l'ordre d'apparition


    Pour un PWORD, c'est un pointeur sur une variable de 2 octets, donc en VB ça devrai être un type Short passé par référence (By Ref)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour ces réponses claires.
    Cependant j'ai encore des problèmes avec les types.
    J'ai pu remarqué que l'utilisation d'un type Int32 pour un DWORD marchait très bien par contre je ne suis pas sûre pour la conversion PCHAR => String.

    C'est que j'utilise donc la librairie mpusbapi.dll, et l'ouverture du port avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myOutPipe = MPUSBOpen(0, vid_pid, out_pipe, MP_WRITE, 0)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Public Const MP_WRITE = 0
        Public Const vid_pid = "vid_04d8&pid_000b"
        Public Const out_pipe = "\MCHP_EP1"
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Declare Function MPUSBOpen _
            Lib "mpusbapi" _
            Alias "MPUSBOpen" _
            (ByVal instance As Long, _
            ByVal pVID_PID As String, _
            ByVal pEP As String, _
            ByVal dwDir As Long, _
            ByVal dwReserved As Long) _
        As Int32
    sachant qu'en Delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function MPUSBOpen(instance : DWORD ; pVID_PID :PCHAR; pEP : PCHAR; dwDir : DWORD; dwReserved : DWORD): THANDLE;
    ne fonctionne pas puisqu'il renvoie -1.

    Quelqu'un saurait-il m'aider ?

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 143
    Points : 177
    Points
    177
    Par défaut
    Bonjour,

    Pour le PCHAR je serais plutot tenté de faire une déclaration de type
    plutôt que
    ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Declare Function MPUSBOpen _
            Lib "mpusbapi" _
            Alias "MPUSBOpen" _
            (ByVal instance As Long, _
            ByRef pVID_PID As String, _
            ByRef pEP As String, _
            ByVal dwDir As Long, _
            ByVal dwReserved As Long) _
        As Int32
    Voilà, j'espère que ça t'aideras.

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Effectivement ça marche mieux par référence !
    Par contre le type long ne semble pas adapté et il faut mettre des Int32.

    Merci beaucoup pour vos réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser une DLL faite en delphi avec VB6
    Par illuch dans le forum API, COM et SDKs
    Réponses: 12
    Dernier message: 23/05/2014, 06h56
  2. Sauvegarde automatique d'une base de données avec visual basic 6.0
    Par moirs555 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2011, 23h03
  3. Utilisation une Dll en c avec delphi
    Par yann87 dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 22/12/2008, 16h14
  4. Utiliser une dll C# avec delphi
    Par Gruick dans le forum Débuter
    Réponses: 8
    Dernier message: 19/06/2008, 10h23
  5. Utiliser une DLL Delphi avec C#
    Par h8ciz dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/09/2007, 16h46

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