Dans mon application, je me sers d'une solution pour ignorer la molette de la souris. Cette solution nécessite que l'utilisateur installe dans les Références d'access une DLL MouseWheel.dll.
J'aimerai que cette installation soit automatique. Ainsi, je fourni la DLL avec le fichier .adp, et lorsque l'application se lance, elle installe automatiquement la DLL. Pour cela, j'utilise la commande
Code :
- Access.References.addFromFile (monFichier)
|
Sachant que monFichier est une string contenant le nom complet de la DLL (par exemple, "C:\monappli\MouseWheel.dll" ).
Le code se lance sans problème. Toutefois, lorsque j'ouvre un formulaire qui utilise cette DLL, j'ai cette erreur :
Citation :
Erreur d'éxécution '-2147024770 (8007007e)':
Erreur Automation
Le module spécifié est introuvable
|
Et si je lance le débuggeur, je tombe sur une ligne de code
Code :
- Set clsMouseWheel = New MouseWheel.CMouseWheel
|
Le code plante donc à l'utilisation de cette DLL.
Pourtant, si je consulte les références installés dans VBE, MouseWheel y figure bien, avec le bon chemin d'accès.
Si je l'installe à la main, le plus surprenant c'est que là tout fonctionne.
Voici le code complet qui s'éxécute au lancement de l'application :
Code :
- Dim file As String
- Dim ok As Boolean
- ok = False
-
- Set fs = Application.FileSearch
- file = Systeme.parentDir(CurrentProject.FullName) & "MouseWheel.dll"
-
- fs.LookIn = Systeme.parentDir(CurrentProject.FullName)
- fs.FileName = "MouseWheel.dll"
- 'verifie que la DLL est bien dans le repertoire courant de l'application avant de l'installer
- If fs.Execute() > 0 Then
- Dim ref, ref2 As Access.Reference
-
- 'Ce code est juste là pour desinstaller la DLL avant de l'installer
- 'Je voulais etre sur qu'il n'y ai pas de conflit avec une ancienne config de reference
- Dim i, k As Integer
- i = 1
- For Each ref In Access.References
- If ref.Name = "MouseWheel" Then
- Set ref2 = Access.References.Item(i)
- ok = True
- End If
- i = i + 1
- Next
- Set ref = Nothing
- If ok Then
- MsgBox ("on remove" )
- Access.References.Remove ref2
- Set ref2 = Nothing
- End If
- 'Installation de la DLL
- Access.References.AddFromFile (file)
- Else
- 'MsgBox ("L'application nécessite que le fichier ""MouseWheel.dll"" soit installé dans le même répertoire que l'éxécutable." & vbCrLf & "Copier le fichier dans le répertoire de l'application (" & Systeme.parentDir(CurrentProject.FullName) & " ) et relancez-la." ), vbCritical
- End If
|
Sur la MSDN, il donne le meme code pour l'installation et la suppression d'une référence. A n'y rien comprendre
Si quelqu'un a la moindre idée du problème, merci de m'aider, parce que là je n'en peux plus
Message édité par petoulachi le 11-05-2004 à 18:06:03