Bonjour à tou/te/s,

J'ai un problème sournois de conflit entre les espaces de nommage de deux DLL créées par le même fournisseur. Je sais que ces deux DLL peuvent fonctionner ensemble (il existe des logiciels qui le font, comme on le verra ci-dessous), mais pour ma part je n'y arrive pas.

L'une des DLL sert au pilotage d'un périphérique M, et l'autre d'un périphérique C, de types différents.

Comme elles partagent certains noms, j'ai mis en place un renommage dans les différents fichiers de mon projet :

MController.hpp
----------------

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
#import "MPERIPH.dll" named_guids \
	rename("IPort", "MIPort") \
	rename("_ILockEvents", "M_ILockEvents") \
	rename("_IDeviceLink", "M_IDeviceLink") \
	rename("IDeviceClient", "MIDeviceClient") \
	rename("IDevice", "MIDevice")
attribut public
	MPERIPHLib::MControllerPtr periph_m;
MController.cpp
----------------
Dans le constructeur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
periph_m.CreateInstance(MPERIPHLib::CLSID_MController);
CController.hpp
----------------

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
#import "CPERIPH.dll" named_guids \
	rename("IPort", "CIPort") \
	rename("_ILockEvents", "C_ILockEvents") \
	rename("_IDeviceLink", "C_IDeviceLink") \
	rename("IDeviceClient", "CIDeviceClient") \
	rename("IDevice", "CIDevice")
attribut public
	CPERIPHLib::CControllerPtr periph_c;
CController.cpp
----------------
Dans le constructeur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
periph_c.CreateInstance(CPERIPHLib::CLSID_CController);
main.cpp
--------

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
MController m = new MController();
CController c = new CController();
Au lancement "normal" de l'exécutable, tout seul, les deux panneaux de contrôle que j'ai créés apparaissent, mais seul celui du periph_m répond (l'autre est alors en mode "aucun appareil détecté").

Si je lance mon logiciel, et qu'ensuite, une fois les deux fenêtres affichées, je lance en même temps un logiciel qui arrive à faire fonctionner ensemble les deux DLL, alors les deux fenêtres répondent, c'est-à-dire que les deux DLL ont chacune détecté un périphérique fonctionnel.

Quelqu'un a-t-il déjà eu des problèmes similaires ? Y a-t-il une recette miracle à utiliser vis-à-vis de tels conflits de nommage ? Je dois avouer que je suis perdu et que le service du fournisseur ne répond pas de façon satisfaisante.

Merci d'avance de vos idées.