DLL VC++ utilisée dans un EXE VB2008

[Résolu]
Signaler
Messages postés
9
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
26 mai 2009
-
Messages postés
9
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
26 mai 2009
-
Bonjour à tous,

Je tente de faire un outil de monitoring en VB2008, au moyen d'une DLL écrite en C++.


Problème : je ne connais ni VC++, ni VB2008, ni la programmation de DLL !


Cependant je connais VB5 (!) et je suis reparti d'une solution 100% C++ que j'ai réussi à compiler et à faire fonctionner, puis que j'ai adapter à ma sauce.
Je ne suis certainement pas au bout de mes ennuis, mais mon problème actuel se situe au moment de l'appel à l'une des API de ma DLL. J'obtiens en effet en effet l'erreur suivante : "EntryPointNotFoundException". J'ai sûrement oublié quelque chose mais quoi et où ? Est-ce du côté de la DLL que le problème se trouve ou bien dans mon appel VB ? Et où précisément ???

Voici les extraits de mon code. Tout d'abord le .h de la DLL VC++ :






#define









MONITORING_API


__declspec

(


dllexport

)





extern





"C"

MONITORING_API


bool

installerLeMonitoring(LPCWSTR cheminDuClient, HWND hFenetre, PROCESSUS_A_MONITORER** ppProcessus,


int

nombreDeProcessus);








extern












"C"

MONITORING_API


void



desinstallerLeMonitoring();










Puis maintenant l'appel dans l'EXE VB2008 :

Imports

System.Runtime.InteropServices

Private
Declare
Auto
Function installerLeMonitoring
Lib
"D:\Developpements\opb\bin\monitoring.dll" (
ByRef cheminDuClient
As
String,
ByVal hFenetre
As
Integer,
ByVal ppProcessus()
As ProcessusAMonitorer,
ByVal nombreDeProcessus
As
Integer)
As
Boolean

Private
Declare
Auto
Sub desinstallerLeMonitoring
Lib
"D:\Developpements\opb\bin\monitoring.dll" ()

(...)installerLeMonitoring(Application.ExecutablePath, frmPrincipale.Handle(), processus, nombreDeProcessus)


Si quelqu'un peut m'aider à résoudre ce problème... Je dirais même que si quelqu'un est intéressé globalement par le projet pour m'aider à le mettre au point, je ne dis pas non ! En deux mots la DLL surcharge les appels aux API de gestion de fichier, d'affichage de texte (à l'écran) et d'ouverture de fenêtres (notamment avec la lib Detours), et communique à l'EXE toutes ces informations. Pour le moment le EXE se contente d'afficher ce qu'il reçoit dans un TextBox ! Mais ce qui m'intéresse c'est d'arriver à faire marcher la DLL et à réussir la communication avec l'EXE.

Olivier

2 réponses

Messages postés
9
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
26 mai 2009

Ca y est ! J'ai trouvé ! En fait j'avais deux anos : une différence de type entre le .h et le .cpp (pointeur de pointeur d'un côté et pointeur de l'autre), et une dans le VB où le tableau de structures était en ByVal au lieu de Byref...
Curieux que le compilateur n'ait pas détecté la première ano.
Bon ! je poursuis la mise au point !

Olivier
Messages postés
9
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
26 mai 2009

Je fais du surplace, mais j'ai simplement constaté que si j'appelle desinstallerLeMonitoring(), ça fonctionne (je veux dire que ça ne plante plus !).

Un coup de dumpbin me donne ceci pour les deux noms de fonction trouvés :

[mailto:?installerLeMonitoring@@YA_NPB_WPAUHWND__@@PAUPROCESSUS_A_MONITORER@@H@Z ?installerLeMonitoring@@YA_NPB_WPAUHWND__@@PAUPROCESSUS_A_MONITORER@@H@Z] = [mailto:?installerLeMonitoring@@YA_NPB_WPAUHWND__@@PAUPROCESSUS_A_MONITORER@@H@Z ?installerLeMonitoring@@YA_NPB_WPAUHWND__@@PAUPROCESSUS_A_MONITORER@@H@Z] (bool __cdecl installerLeMonitoring(wchar_t const *,struct HWND__ *,struct PROCESSUS_A_MONITORER *,int))


desinstallerLeMonitoring = _desinstallerLeMonitoring

Je suppose que le problème vient de là : le nom de la première fonction n'est pas très clair...
Je poursuis mes investigations. Si vous avez des suggestions, n'hésitez pas !

Olivier