Utiliser une DLL

Résolu
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005 - 2 sept. 2005 à 21:22
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005 - 4 sept. 2005 à 13:43
Bonsoir, je cherche à utiliser les fonctions qui se trouvent dans une DLL externe à mon programme VB.

Le seul problème est que je ne sais pas quelle ligne écrire pour dire à VB où se trouve la DLL sur mon disque dur... en l'occurence ce serait App.Path + "\data\xyz.dll"

Merci d'avance pour vos réponses !

23 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 sept. 2005 à 23:06
je vais t'aider BruNews

SetCurrentDirectory est une fonction pour dire à VB que son répertoire "en cours" est celui que tu définis.

donc tu créés un module contenant

Public Sub Main()
'.....instruction de BruNews
Form_Principale.Show
End Sub

et tu définis le projet sur ce Main pour démarrer. donc forcément, VB va chercher le Path de la DLL dans son CurrentPath, que tu auras défini dans ton Main

PCPT
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 sept. 2005 à 13:31
une Form, un Bouton

Private Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
Private Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectoryA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long


Private Sub Command1_Click()
'1 : répertoire de l'application
MsgBox "rep appli : " & App.Path

'2 : donne le rep actuel
Call SetCurrentDirectory("C:\WINDOWS")

'3 : récupère le rep actuel
Dim aPath As String
aPath = String(255, Chr(0))
Call GetCurrentDirectory(255, aPath)
MsgBox "rep donné : " & aPath
End Sub

PCPT
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 21:33
Balance un SetCurrentDirectory() sur le dossier où elle se trouve tout au début de ton prog et devrait aller.

ciao...
BruNews, MVP VC++
0
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005
2 sept. 2005 à 21:37
Merci pour la réponse mais il n'a pas l'air d'accord....

Y'a pas une ligne à ajouter dans le module... genre "Declare (App.Path + "\data\xyz.dll")"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 21:47
Mais si qu'il sera d'accord, le mieux est de ne pas lui demander.
Sérieux je l'ai déjà fait et va impec.
Lance l'appel SetCurrentDirectory depuis ton entrée Main(), suffit juste que soit fait avant le 1er appel vers la dll, ensuite par force le système trouvera ta dll à charger car elle sera dans ta currentDirectory.
Dans ton "Declare Function..." ne plus mettre de chemin du tout.

ciao...
BruNews, MVP VC++
0
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005
2 sept. 2005 à 21:59
Alors je dois faire un truc faux... mais en tout cas VB me répond "Invalid Outside Procedure" avec cette ligne là : SetCurrentDirectory() = App.Path que je là mette à Form_Load ou après Option Explicit
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 22:18
ah non, là on part de trop loin.
Va voir dans les sources comment on utilise les appels API.
Declare Function SetCurrentDirectory....

chem = app.path + "dossier\autredossier"
SetCurrentDirectory chem

voila le genre qui devrait se trouver dans ton main()

ciao...
BruNews, MVP VC++
0
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005
2 sept. 2005 à 22:21
Désolé mais euh... tu me fiches dedans avec ton main() j'ai pas de main en VB... si tu penses au contenu de la DLL, je ne l'ai pas créer moi, c'est une utilisation après achat...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 sept. 2005 à 22:37
Bien entendu il y a un main() dans vb, suffit d'indiquer dans propriétés du proj que tu veux démarrer sur main(), auquel cas tu crées la fonction dans un module et dedans tu chargeras la form que tu voudras après l'appel SetCurrentDirectory.

ciao...
BruNews, MVP VC++
0
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005
3 sept. 2005 à 11:44
Merci pour cet éclaircissement, ça à l'air d'aller mieux, je vous tiens au courant si il y'à d'autres problèmes !
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 sept. 2005 à 11:53
tu peux valider plusieurs réponses, je n'ai fait que traduire celle de BruNews
PCPT
0
Hooooo décidemment, erreur au démarrage de l'application, j'ai parlé trop vite !

Il pointe encore et toujours cette ligne de SetCurrentDirectory()=App.Path, l'erreur est "Sub or Function not defined" décidemment, je n'y arriverai donc jamais ! c'est quand même tout simple comme truc...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 sept. 2005 à 11:58
Mais c'est quand que tu vas enlever ça ?
SetCurrentDirectory()=App.Path

SetCurrentDirectory est une API !!!
Regarde plus haut.

ciao...
BruNews, MVP VC++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 sept. 2005 à 12:01
tu trouverais logique de faire MsgBox "bonjour", 32, "hello!!" = "hein?" ?
PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 sept. 2005 à 12:02
arf, çà ne fait pas d'erreur
0
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005
3 sept. 2005 à 12:20
Pfffff moi je peux pas écrire simplement SetCurrentDirectory() il m'exige un =

Non c'est pas logique de mettre MsgBox blablabla = qqch

Je l'ai bien compris... mais ma fois... ça marche pas autrement...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 sept. 2005 à 12:25
Call SetCurrentDirectory()

normalement, c'est tout.
je vais vérifier de ce pas...
PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 sept. 2005 à 12:27
*et le path dans les parenthèses, évidemment.
c'est vérifié, c'est bien çà !
PCPT
0
bilat0 Messages postés 17 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 2 octobre 2005
4 sept. 2005 à 12:27
Je dois avoir un sérieux bug, car VB me répond encore et toujours "Sub or Function not defined" sur la ligne : Call SetCurrentDirectory(App.Path) ça commençe à me
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2005 à 12:43
Tu as bien mis la déclaration de l'API ?
Declare Function SetCurrentDirectory.....

ciao...
BruNews, MVP VC++
0
Rejoignez-nous