Je suis en train de développer un logiciel qui, en plus du programme
lui-même, fournit une DLL et une feuille de calcul Excel utilisant la
DLL. L'ensemble est installé sur l'ordinateur de l'utilisateur dans le
dossier par défaut pour les programmes. C'est là que commencent les
problèmes. Ce dossier est variable, typiquement:
sous Win32 : c:\Program Files
sous Winx64: c:\Program Files (x86)
ou tout autre si les paramètres de windows ont été changés.
Comment faire pour appeler ma DLL en tenant compte de cet aspect variable?
Jusqu'à présent, j'avais codé ça en statique dans l'entête de la macro:
Declare Function LitFichier Lib "c:\Program Files\MonLogiciel\MaLib.dll"
(ByVal Nom_Fichier As String, SizeNom As Long) As Long
Sub Ouvrir() Const Cible = &H26 Dim objShell As Object Dim objFolder As Object, objFolderItem As Object Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(Cible) Set objFolderItem = objFolder.Self AddIns.Add(objFolderItem.Path).Installed = True AddIns(objFolderItem.Path).Installed = True End Sub
isabelle
Le 2010-02-21 14:18, Eric S a écrit :
Certes, mais comment je fais pour intégrer sans l'appel aux fonctions de la DLL, sachant que la déclaration se fait avant le début du code exécutable?
J'imagine qu'il y a une méthode pour charger dynamiquement la DLL alors qu'actuellement, je suis plutôt en statique:
Declare Function LitFichier Lib "c:Program FilesMonLogicielMaLib.dll" (ByVal Nom_Fichier As String, SizeNom As Long) As Long
Sub Ouvrir()
Dim Resultat As String
Resultat = "donnees.txt" If LitFichier(Resultat, Len(Resultat)) <> 0 Then MsgBox "Impossible de charger le fichier donnees.txt"
Eric
Le 21/02/2010 19:49, isabelle a écrit :
Le 2010-02-21 12:37, Eric S a écrit :
Résultat: C:Program Files (x86)
c'est bon, pour winxp Résultat: C:Program Files isabelle
tu pourrais le faire dans la macro open,
Sub Ouvrir()
Const Cible = &H26
Dim objShell As Object
Dim objFolder As Object, objFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(Cible)
Set objFolderItem = objFolder.Self
AddIns.Add(objFolderItem.Path).Installed = True
AddIns(objFolderItem.Path).Installed = True
End Sub
isabelle
Le 2010-02-21 14:18, Eric S a écrit :
Certes, mais comment je fais pour intégrer sans l'appel aux fonctions
de la DLL, sachant que la déclaration se fait avant le début du code
exécutable?
J'imagine qu'il y a une méthode pour charger dynamiquement la DLL
alors qu'actuellement, je suis plutôt en statique:
Declare Function LitFichier Lib "c:Program
FilesMonLogicielMaLib.dll" (ByVal Nom_Fichier As String, SizeNom As
Long) As Long
Sub Ouvrir()
Dim Resultat As String
Resultat = "donnees.txt"
If LitFichier(Resultat, Len(Resultat)) <> 0 Then
MsgBox "Impossible de charger le fichier donnees.txt"
Eric
Le 21/02/2010 19:49, isabelle a écrit :
Le 2010-02-21 12:37, Eric S a écrit :
Résultat: C:Program Files (x86)
c'est bon,
pour winxp
Résultat: C:Program Files
isabelle
Sub Ouvrir() Const Cible = &H26 Dim objShell As Object Dim objFolder As Object, objFolderItem As Object Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(Cible) Set objFolderItem = objFolder.Self AddIns.Add(objFolderItem.Path).Installed = True AddIns(objFolderItem.Path).Installed = True End Sub
isabelle
Le 2010-02-21 14:18, Eric S a écrit :
Certes, mais comment je fais pour intégrer sans l'appel aux fonctions de la DLL, sachant que la déclaration se fait avant le début du code exécutable?
J'imagine qu'il y a une méthode pour charger dynamiquement la DLL alors qu'actuellement, je suis plutôt en statique:
Declare Function LitFichier Lib "c:Program FilesMonLogicielMaLib.dll" (ByVal Nom_Fichier As String, SizeNom As Long) As Long
Sub Ouvrir()
Dim Resultat As String
Resultat = "donnees.txt" If LitFichier(Resultat, Len(Resultat)) <> 0 Then MsgBox "Impossible de charger le fichier donnees.txt"
Eric
Le 21/02/2010 19:49, isabelle a écrit :
Le 2010-02-21 12:37, Eric S a écrit :
Résultat: C:Program Files (x86)
c'est bon, pour winxp Résultat: C:Program Files isabelle
isabelle
tu pourrais le faire dans la macro open,
Sub Ouvrir() Const Cible = &H26 Dim objShell As Object Dim objFolder As Object, objFolderItem As Object Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(Cible) Set objFolderItem = objFolder.Self AddIns.Add(objFolderItem.Path & "MaLib.dll").Installed = True AddIns(objFolderItem.Path & "MaLib.dll").Installed = True End Sub
isabelle
Le 2010-02-21 14:18, Eric S a écrit :
Certes, mais comment je fais pour intégrer sans l'appel aux fonctions de la DLL, sachant que la déclaration se fait avant le début du code exécutable?
J'imagine qu'il y a une méthode pour charger dynamiquement la DLL alors qu'actuellement, je suis plutôt en statique:
Declare Function LitFichier Lib "c:Program FilesMonLogicielMaLib.dll" (ByVal Nom_Fichier As String, SizeNom As Long) As Long
Sub Ouvrir()
Dim Resultat As String
Resultat = "donnees.txt" If LitFichier(Resultat, Len(Resultat)) <> 0 Then MsgBox "Impossible de charger le fichier donnees.txt"
Eric
Le 21/02/2010 19:49, isabelle a écrit :
Le 2010-02-21 12:37, Eric S a écrit :
Résultat: C:Program Files (x86)
c'est bon, pour winxp Résultat: C:Program Files isabelle
tu pourrais le faire dans la macro open,
Sub Ouvrir()
Const Cible = &H26
Dim objShell As Object
Dim objFolder As Object, objFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(Cible)
Set objFolderItem = objFolder.Self
AddIns.Add(objFolderItem.Path & "MaLib.dll").Installed = True
AddIns(objFolderItem.Path & "MaLib.dll").Installed = True
End Sub
isabelle
Le 2010-02-21 14:18, Eric S a écrit :
Certes, mais comment je fais pour intégrer sans l'appel aux fonctions
de la DLL, sachant que la déclaration se fait avant le début du code
exécutable?
J'imagine qu'il y a une méthode pour charger dynamiquement la DLL
alors qu'actuellement, je suis plutôt en statique:
Declare Function LitFichier Lib "c:Program
FilesMonLogicielMaLib.dll" (ByVal Nom_Fichier As String, SizeNom As
Long) As Long
Sub Ouvrir()
Dim Resultat As String
Resultat = "donnees.txt"
If LitFichier(Resultat, Len(Resultat)) <> 0 Then
MsgBox "Impossible de charger le fichier donnees.txt"
Eric
Le 21/02/2010 19:49, isabelle a écrit :
Le 2010-02-21 12:37, Eric S a écrit :
Résultat: C:Program Files (x86)
c'est bon,
pour winxp
Résultat: C:Program Files
isabelle
Sub Ouvrir() Const Cible = &H26 Dim objShell As Object Dim objFolder As Object, objFolderItem As Object Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(Cible) Set objFolderItem = objFolder.Self AddIns.Add(objFolderItem.Path & "MaLib.dll").Installed = True AddIns(objFolderItem.Path & "MaLib.dll").Installed = True End Sub
isabelle
Le 2010-02-21 14:18, Eric S a écrit :
Certes, mais comment je fais pour intégrer sans l'appel aux fonctions de la DLL, sachant que la déclaration se fait avant le début du code exécutable?
J'imagine qu'il y a une méthode pour charger dynamiquement la DLL alors qu'actuellement, je suis plutôt en statique:
Declare Function LitFichier Lib "c:Program FilesMonLogicielMaLib.dll" (ByVal Nom_Fichier As String, SizeNom As Long) As Long
Sub Ouvrir()
Dim Resultat As String
Resultat = "donnees.txt" If LitFichier(Resultat, Len(Resultat)) <> 0 Then MsgBox "Impossible de charger le fichier donnees.txt"
Eric
Le 21/02/2010 19:49, isabelle a écrit :
Le 2010-02-21 12:37, Eric S a écrit :
Résultat: C:Program Files (x86)
c'est bon, pour winxp Résultat: C:Program Files isabelle
En fait, à regarder sur internet, j'ai l'impression que AddIns ne s'applique qu'aux DLL COM, ce qui n'est pas le cas de ma DLL.
Eric
Eric S
Le 21/02/2010 20:56, michdenis a écrit :
"Excel 2003 VBA Programmer's Reference" Paul Kimmel, Stephen Bullen John Green, Rob Bovey, Robert Rosenberg
Je vais voir si je peux mettre la main sur le bouquin.
à partir de la fenêtre de l'éditeur de code, barre des menus / référence / tu utilises le bouton parcourir et dans l'arborescence des fichiers de l'explorateur Windows, tu retrouves la location de ton fichier Dll et tu l'ajoutes comme référence.
Message d'erreur : Impossible d'ajouter une référence au fichier spécifié.
Eric
Le 21/02/2010 20:56, michdenis a écrit :
"Excel 2003 VBA Programmer's Reference"
Paul Kimmel, Stephen Bullen
John Green, Rob Bovey, Robert Rosenberg
Je vais voir si je peux mettre la main sur le bouquin.
à partir de la fenêtre de l'éditeur de code, barre des menus /
référence / tu utilises le bouton parcourir et dans l'arborescence
des fichiers de l'explorateur Windows, tu retrouves la location
de ton fichier Dll et tu l'ajoutes comme référence.
Message d'erreur : Impossible d'ajouter une référence au fichier spécifié.
"Excel 2003 VBA Programmer's Reference" Paul Kimmel, Stephen Bullen John Green, Rob Bovey, Robert Rosenberg
Je vais voir si je peux mettre la main sur le bouquin.
à partir de la fenêtre de l'éditeur de code, barre des menus / référence / tu utilises le bouton parcourir et dans l'arborescence des fichiers de l'explorateur Windows, tu retrouves la location de ton fichier Dll et tu l'ajoutes comme référence.
Message d'erreur : Impossible d'ajouter une référence au fichier spécifié.