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
----------------
MController.cpp
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;
----------------
Dans le constructeur :
CController.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 periph_m.CreateInstance(MPERIPHLib::CLSID_MController);
----------------
CController.cpp
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;
----------------
Dans le constructeur :
main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 periph_c.CreateInstance(CPERIPHLib::CLSID_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é").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MController m = new MController(); CController c = new CController();
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.
Partager