Re: AtlMarshalPtrInProc return E_NOINTERFACE
The thing is
CComPtr<IB> pp;
IStream *pStm;
HRCHECK( CComObject<CMyClass>::CreateInstance(&p));
HRCHECK(p->QueryInterface(IID_IB, (void**)&pp));
HRESULT hRes = AtlMarshalPtrInProc(pp, IID_IB,&pStm);
doesn't work either. Everything is registered. What really makes me
frustrated is that marshaling works just fine for IC and IA and only fails
for IB even though all these interfaces are indentical
in every way
"Igor Tandetnik" <itandetnik@mvps.org> wrote in message
news:uuy7vi7yIHA.4952@TK2MSFTNGP05.phx.gbl...
"Vitalij Skrupskij" <vitalij@4team.biz> wrote in message
news:7A5E3BE3-04B4-4BC6-BEA4-5656BD52319D@microsoft.com
CComPtr<IA> pp;
IStream *pStm;
HRCHECK( CComObject<CMyClass>::CreateInstance(&p));
HRCHECK(p->QueryInterface(IID_IUnknown, (void**)&pp));
Why are you querying for IUnknown, but putting the result into IA pointer?
This is equivalent to a downcast, and is illegal in COM. Query for the
interface you actually want.
HRESULT hRes = AtlMarshalPtrInProc(pp, IID_IB
&pStm);
Why are you passing IA pointer, but specify IID_IB? The two parameters
must match.
Have you built and registered proxy/stub DLL for your interfaces? Check in
the registry under HKCR\Interface\{Your IID}
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925