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

VB 6 et antérieur Discussion :

Manipulation de Dlls


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 52
    Points
    52
    Par défaut Manipulation de Dlls
    Bonjour à tous,

    voici le sujet :

    soit une Dll : Test.dll
    soit la fonction suivante dans Test.dll avec 2 paramètres de type String : Fonction01(strChaine01 as String, strChaine02 as String) As long

    Une manipulation classique serait la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Declare Function Fonction01 Lib "Test.dll" (ByVal strChaine01 as String, ByVal strChaine02 as String) As Long
    Ensuite, aucun soucis pour manipuler Fonction01.

    Mon souhait est de manipuler la fonction par le biais des pointeurs, et là, je sèche...

    Voici le début de ma réflexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
     
    Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
     
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
     
    Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
                              (ByVal lpPrevWndFunc As Long, ByVal hWnd As         Long, ByVal Msg As Long, _
                              ByVal wParam As Long, ByVal lParam As Long) As Long
     
    Public Sub LancerFonction01()
     
      Dim lngDll           As Long
      Dim lngFonction   As Long
     
      lngDll = LoadLibrary(App.Path & "\Test.dll")
     
      if lngDll <> 0 then
     
          lngFonction = GetProcAddress(lngDll, "Fonction01")
     
          '''Mais là, c'est la panne : comment je passe les paramètres, ici de type String, à ma fonction ???????
     
     
      End If
     
      FreeLibrary lngDll
     
    End Sub
    J'ignore si je suis très clair, et vous remercie d'avance de votre contribution.

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut Flamenco Del Toros.

    C'est une technique avancée que tu nous demandes là.

    Google est notre ami à tous et nous fourni la solution : http://bytes.com/forum/thread577907.html

    Une autre aussi très intéressante : http://www.vbforums.com/showpost.php...53&postcount=5

    C'est en anglais mais facilement compréhensible.

    Si j'ai pu t'aider...

    Linker.storm Portos con carne.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 52
    Points
    52
    Par défaut Merci
    Salut Linker.storm,

    je me doutais qu'à ce niveau, je verrais poindre le bout de ton petit museau.

    Je devine dans tes pistes une réponse du genre : "et voici les limites de vb...", ou encore, "et oui vb peut récupérer le pointeur d'une fonction mais ne peut l'utiliser....sans feindre un temps soit peu de s'y connaitre en assembleur...".

    Bref une soluce simple en perspective.

    A bientôt vers de nouveaux eldorado et le bonjour à notre tendre et belle région.

    Merci.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Qué tal,

    Pourquoi ne fais-tu pas dans ta dll des classes, que tu instancierais avec CreateObject, puis tu pourrais appeler leurs fonctions avec CallByName ?

    Sinon pour le problème du long comme paramètre d'entrée, peut-être est-ce possible de passer l'adresse long du pointeur d'un parmarray ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    après lecture du deuxième lien donné par notre ami, il semble que les 4 paramètres lng suivants le pointeur de fonction dans l'appel à CallWindowProc soient les pointeurs des arguments passés à la dite fonction.

    VarPtr est ton ami

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 52
    Points
    52
    Par défaut Merci
    Bonjour et merci,

    effectivement, le varPtr ressemble à un ami, il me sussure qu'il est mon ami mais cela ne fonctionne pas toujours ni aussi simplement : genre, access violation....

    J'ai pour le moment contourné le soucis, productivité oblige, mais à l'occasion, je reviendrais avec je l'espère une soluce universelle à donner.

    Merci encore à tous.

    Si je peux, je le fais, si je ne le peux, vous pouvez par soucis de place et si vous le souhaitez, mettre cette discussion en résolue.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/04/2015, 20h50
  2. Réponses: 2
    Dernier message: 20/12/2010, 20h00
  3. Qui sait manipuler l'API wlanapi.dll ?
    Par Ehjoe dans le forum Windows Forms
    Réponses: 0
    Dernier message: 03/12/2009, 23h41
  4. Créer des DLL manipulant les tables d'une BDD
    Par dj_techno dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/02/2007, 08h20
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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