Voilà mon pb, je précise que je commence dans l'utilisation des templates ...
Code :
- template <class Q>
- STDMETHODIMP QueryInterface(Q **pp)
- {
- // Interface Dispatcher
- if ( pp == NULL) return E_POINTER;
- ATLASSERT(*pp == NULL);
- if ( typeid(Q) == typeid(IChannel))
- return CBChannel::QueryInterface(pp);
- else if (typeid(Q) == typeid(CServices))
- return m_CParser.QueryInterface(pp);
- return E_NOINTERFACE;
- }
|
Et lorsque je déclare :
Code :
- // Query IDVBChannel Interface to Channel Event
- CServices * pIDVBChannel(NULL);
- if (FAILED(hr = m_ChannelEvent.QueryInterface(&pIDVBChannel))) {
- _LOG(_T("Failed to QI CServices from Channel Event : %0X" ), hr);
- }
|
A la compilation j'ai l'erreur :
e:\Dev\Src\Tnt\Ktv3_new\K!TV_02042006_1925\Sources\dvbt\DVBTChannelEvent.h(149) : error C2664: 'CBChannel::QueryInterface' : impossible de convertir le paramètre 1 de 'CServices ** ' en 'IChannel ** '
Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
e:\Dev\Src\Tnt\Ktv3_new\K!TV_02042006_1925\Sources\dvbt\DVBTChannel.cpp(361) : voir la référence à l'instanciation du modèle de fonction 'HRESULT CDVBTChannelEvent::QueryInterface<CServices>(Q ** )' en cours de compilation
with
[
Q=CServices
]
Je ne pige pas pourquoi l'erreur s'applique au type IChannel alors que j'utilise le type CServices, comme si
typeid ne fonctionnait pas comme je le conçois !?
Merci
Message édité par cricri_ le 10-04-2006 à 15:19:35