Utiliser une DLL dans VBA sans VC++ sur la machine

runo Messages postés 26 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 - 4 févr. 2010 à 14:58
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 5 févr. 2010 à 10:57
Bonjour,
je me suis compilé une petite DLL sous VC++ avec qq accès de base :

Je l'appelle ensuite dans VB avec le code ci dessous (je précise que ma fichier .dll est dans le même répertoire que le fichier excel) :

' Little Functions in the DLL
Private Declare Function sum Lib "EEFUSE.dll" (ByVal Number1 As Long, ByVal Number2 As Long) As Long
Private Declare Function multiply Lib "EEFUSE.dll" (ByVal Number1 As Long, ByVal Number2 As Long) As Long
Private Declare Function substract Lib "EEFUSE.dll" (ByVal Number1 As Long, ByVal Number2 As Long) As Long

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Declare Function SetDllDirectory Lib "kernel32" Alias "SetDllDirectoryA" (ByVal lpPathName As String) As Boolean

Public Sub MyEssai()
Dim a As Long
Dim b As Long
a = 2
b = 10

'map 'myLocalDLL' into the address space of the calling process.
Dim myLocalLib As Long
myLocalLib = LoadLibrary(ThisWorkbook.Path & "\EEFUSE.dll")
Debug.Print "Load Addr = " & myLocalLib

Debug.Print (sum(a, b))
Debug.Print (multiply(a, b))
Debug.Print (substract(a, b))

' unmap the DLL's address
FreeLibrary (myLocalLib)
End Sub


Jusque là pas de souci j'obtiens bien :
Load Addr = 107282432
12
20
-8


Le problème que j'ai est que je n'arrive pas à l'utiliser sur des PC qui n'ont pas VC++ d'installé... donc ce n'est pas portable.
A part ceux qui me répondront que je dois installé VC++, avez vous des idées ?

Merci

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
4 févr. 2010 à 15:12
Bonjour,

on ne voit là que des appels à des fonctions de librairies de Windows et pas du tout ce que contient TA dll EEFUSE.dll!
Que contient-elle donc ? (puisque c'est ce qu'elle contient, qui peut poser problème)
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
runo Messages postés 26 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 15 avril 2011
4 févr. 2010 à 15:20
Bonjour,

je m'auto réponds car j'ai trouvé la solution.
Il fallait que je change le paramètre "Use of MFC" dans les propriétés générales de mon projet DLL sous VC++ (mettre Use MFC in a static Library)
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
5 févr. 2010 à 09:22
Une autre idée sous forme de question:
Que fout du MFC dans une DLL ???

On règle le mode compil en C et on écrit un code TRES optimisé. Résultat on a une DLL rapide de qlqs Ko au lieu d'un gros veau en Mo.

ciao...
BruNews, MVP VC++
0
runo Messages postés 26 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 15 avril 2011
5 févr. 2010 à 09:35
J'ai pas compris ta réponse BruNews....

J'ai été obligé de mettre cette option car il manquait des dépendances à ma DLL (sans doute).

Si je voulais l'utiliser sur un PC ou VC++ n'était pas installée (ce qui est tout à fait possible fort heureusement) je n'avais pas vraiment le choix...
0

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

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
5 févr. 2010 à 10:57
Comme dit plus haut, regle tes options de compil en C (exit C++, MFC et autres biniouteries) et sera 0 dépendance.

ciao...
BruNews, MVP VC++
0