VBA Chemin d'une DLL installée par un logiciel

Le
Eric S
Bonjour,

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 FilesMonLogicielMaLib.dll"
(ByVal Nom_Fichier As String, SizeNom As Long) As Long

Des pistes?

Éric
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #21242011
bonjour Éric,

peut tu tester cette macro avec Winx64 ?

Sub CheminRepertoiresSpeciaux()
'Testé sur WinXp
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
MsgBox objFolderItem.Path
End Sub

isabelle

Le 2010-02-21 10:21, Eric S a écrit :
Bonjour,

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
FilesMonLogicielMaLib.dll" (ByVal Nom_Fichier As String, SizeNom As
Long) As Long

Des pistes?

Éric


Hervé
Le #21242211
Bonjour,

Et en interrogeant le chemin de ton programme tu doit pouvoir récupérer le
chemin de ta DLL si elle est installée dans le même dossier non ?
en VB6 :
DossierDLL=App.Path & ""
En VB.Net :
DossierDLL=My.Application.Info.DirectoryPath & ""

Hervé.


"Eric S" news:4b814f6e$0$12192$
Bonjour,

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 FilesMonLogicielMaLib.dll"
(ByVal Nom_Fichier As String, SizeNom As Long) As Long

Des pistes?

Éric


Eric S
Le #21242461
Le 21/02/2010 17:30, isabelle a écrit :
bonjour Éric,

peut tu tester cette macro avec Winx64 ?



Windows 7, x64 :

Résultat: C:Program Files (x86)


Eric
Eric S
Le #21242441
Je parle d'appeler la DLL depuis une macro excel, pas depuis mon
programme. Et si par défaut, la feuille excel se trouve dans le même
dossier que la DLL, ensuite l'utilisateur peut faire des copies de la
feuille excel dans d'autres dossiers mais il faut quand même retrouver
la DLL qui elle ne bouge pas.

Eric
michdenis
Le #21242881
Bonjour,

Habituellement, les fichiers "DLL" se retrouvent dans un de
ces répertoires selon le système d'exploitation utilisé

C:WindowsSystem32
Sous des versions de Windows plus anciennes :
c:WindowsSystem

Pour retrouver ta Dll, tu peux utiliser ceci si tu as placé ta DLL
dans le bon répertoire :

'Haut module standard : Déclaration de l'API
Private Declare Function GetSystemDirectory& Lib "kernel32" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)

'-------------------------------
Sub Test()
Dim MaDll As String
Trouver_Dll "MonFichier.Dll"
End Sub
'-------------------------------
Sub Trouver_Dll(MaDll As String)
Dim sPath As String, tPath As String
tPath = Space(255)
tPath = Left(tPath, GetSystemDirectory(tPath, 255)) & "" & MaDll
MsgBox tPath
End Sub
'-------------------------------


Pour ce qui suit, suppose que tu veuilles installer une Dll sur un
nouvel ordinateur. En supposant qu'elle est dans le même
répertoire que le fichier qui exécute cette macro, voici une façon
de copier cette Dll dans le bon répertoire et de l'initialiser dans
la base de registre de Windows

'Déclaration de l'Api dans le haut du module
Private Declare Function GetSystemDirectory& Lib "kernel32" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)
'----------------------------------------------
Sub OcxReg(OcxName As String)
Dim sPath As String, tPath As String
sPath = ThisWorkbook.Path & "" & OcxName
If Dir(sPath) = "" Then
MsgBox "File " & sPath & " no found !", 48
Exit Sub
End If
tPath = Space(255)
tPath = Left(tPath, GetSystemDirectory(tPath, 255)) & ""
If Dir(tPath & OcxName) = "" Then
FileCopy sPath, tPath & OcxName
Shell tPath & "regsvr32.exe " & OcxName & " /s"
End If
End Sub
'----------------------------------------------

ET pour l'appel de la procédure précédente :
'------------------------------------------------
Sub Test()
OcxReg "NomDeMaDll.Dll"
End Sub
'------------------------------------------------






"Eric S" 4b814f6e$0$12192$
Bonjour,

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 FilesMonLogicielMaLib.dll"
(ByVal Nom_Fichier As String, SizeNom As Long) As Long

Des pistes?

Éric
Eric S
Le #21243081
C'est possible d'enregistrer une simple DLL qui n'est pas un ocx, un
activeX ou un objet COM+++?

Eric
isabelle
Le #21243071
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
Eric S
Le #21243291
En fait la question que m'inspire ton message est:
- si le programme d'installation enregistre la DLL, est-ce que Excel/VBA
est capable de la retrouver tout seul?


Le 21/02/2010 19:48, Eric S a écrit :
C'est possible d'enregistrer une simple DLL qui n'est pas un ocx, un
activeX ou un objet COM+++?

Eric


Eric S
Le #21243281
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


michdenis
Le #21243591
"Excel 2003 VBA Programmer's Reference"
Paul Kimmel, Stephen Bullen
John Green, Rob Bovey, Robert Rosenberg

Dans leur bouquin, les auteurs réservent un chapitre
complet (chapitre 13) sur le sujet. Je ne vais pas t'en
faire un résumé. Il y a plus d'une façon de faire dont
celle-ci :
à 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. Dans l'explorateur
d'objets (F2), tu devrais retrouver toutes les fonctions (sub) définies
dans ta Dll. Tu peux appeler ces fonctions directement dans ton code.

Par automation, ça pourrait donner ceci :
MyAddin : Nom de la DLL
Simple : Nom de la classe
'------------------------------
Sub InstallAutomationAddin()
AddIns.Add Filename:="MyAddin.Simple"
AddIns("MyAddin.Simple").Installed = True
End Sub
'------------------------------
C'est comme si tu ajoutais un fichier de macro complémentaire !
Ce qui précède te permet d'appeler tes fonctions directement
dans la feuille de calcul.

L'idéal serait que tu puisses accéder au bouquin et lire toutes les
explications sur le sujet. Perso. J'ai déjà tenté le coup pour le
plaisir, mais je n'ai pas beaucoup d'expérience à ce niveau.






"Eric S" 4b8185aa$0$15434$
En fait la question que m'inspire ton message est:
- si le programme d'installation enregistre la DLL, est-ce que Excel/VBA
est capable de la retrouver tout seul?


Le 21/02/2010 19:48, Eric S a écrit :
C'est possible d'enregistrer une simple DLL qui n'est pas un ocx, un
activeX ou un objet COM+++?

Eric


Publicité
Poster une réponse
Anonyme