Bonjour � toutes et tous
Je suis en train de faire un composant WPF (un poil de C# et beaucoup de C++/CLI) qui encapsule des librairie C++.
Cot� C++, nous avons un syst�me de notification interne bas� sur des callbacks. Je voudrais que ces notifications soient accessibles dans l'interface via l'envoi d'event manag� classique (le but est que les utilisateurs du composant ne voient pas le code non manag�)
Sauf que j'aimerais �viter d'�crire un m�canisme g�n�rique auquel on file le type de notification, la classe d'argument de l'event CLI et qu'il transforme l'un en l'autre tout seul. Et je bloque sur deux points :
- Pas le droit aux pointeurs de fonction sur une classe manag�e
- Pas possible de d�clar� un event depuis une classe non manag�
J'�tais donc parti sur une classe template mais je n'arrive pas a utiliser un type d'event et/ou delegate en param�tre de template ... (ce qui me semble logique)
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public ref class CkstClrKineoControl : public System::Windows::Controls::Control { public: delegate void SelectionDidChangeDelegate(CkstClrNotificationSelection^ i_selection); SelectionDidChangeDelegate^ SelectionDidChangeEvent; event SelectionDidChangeDelegate^ SelectionDidChangeEventHandler {...} // add, remove & raise private: CkstClrNotificator<CkstClrNotificationSelection, SelectionDidChangeDelegate>* m_notificator; } CkstClrKineoControl::CkstClrKineoControl() { m_notificator = new CkstClrNotificator <CkstClrNotificationSelection, SelectionDidChangeDelegate> (CkitNotificator::defaultNotificator(), CkppSelection::DID_CHANGE, SelectionDidChangeEvent); }Bon �a marche pas, mais c'est le seul truc que j'arrive � faire compiler
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 template < typename clrNotificationClass, typename eventClass > class CkstClrNotificator { public: inline CkstClrNotificator(const CkitNotificatorShPtr& i_notificator, CkitNotification::TType i_type, eventClass^ i_event): m_type(i_type), m_event(i_event) { i_notificator->subscribe< CkstClrNotificator >(m_type, this, &CkstClrNotificator::notificationReciever); } inline virtual ~CkstClrNotificator() { CkitNotificator::defaultNotificator()->unsubscribe(m_type, this); } inline void notificationReciever(const CkitNotificationConstShPtr& i_notification) { CkstClrNotificationSelection^ clrSelection = gcnew clrNotificationClass(i_notification); m_event->Invoke(clrSelection); } private: CkitNotification::TType m_type; gcroot<eventClass^> m_event; };
Donc je cherche soit a corriger cette m�thode, soit une autre m�thode ou je pourrais transformer mes notifications en event manag� sans avoir a �crire une classe sp�cifique non manag� et une fonction manag� sp�cifique pour faire envoy� l'event, ceci par type de notification a envoyer
Partager