Hi,
I've been try to use ATL/COM to build a VC7 project and handle the
ProjectBuildStarted and ProjectBuildFinished events
I'm unable to hook my callbacks to handle the events as ATLAdvise call
fails.
Here are some snippets from the code:
The VCProjectEngine.IDL list the following interface:
...
dispinterface _dispVCProjectEngineEvents;
...
[
uuid(5F495F17-94D6-43D2-AF66-490AA1E04A79)
]
dispinterface _dispVCProjectEngineEvents {
properties:
methods:
...
coclass VCProjectEngineEvents {
[default] interface _VCProjectEngineEvents;
[default, source] dispinterface _dispVCProjectEngineEvents;
};
---------------------------------------------------------------------
I have a class CBuildEvents that implements dispVCProjectEngineEvents
class CBuildEvents:
public CComObjectRoot,
public _dispVCProjectEngineEvents
{
CBuildEvents() {}
BEGIN_COM_MAP(CBuildEvents)
COM_INTERFACE_ENTRY(_dispVCProjectEngineEvents)
END_COM_MAP()
...
STDMETHODIMP ProjectBuildStarted(...
STDMETHODIMP ProjectBuildFinished(...
};
I am stuck while trying to use register this class to handle the
callback
-----------
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CComPtr<VCProjectEngine> ptrVCProjectEngine;
HRESULT hr;
hr = ::CoCreateInstance(CLSID_VCProjectEngineObject, NULL,
CLSCTX_SERVER, IID_VCProjectEngine, (void**) &ptrVCProjectEngine);
CComObject <CBuildEvents> * ptrBuildEvents;
CComObject <CBuildEvents>::CreateInstance(&ptrBuildEvents);
CComPtr<IUnknown> ptrEventsUnk = ptrBuildEvents;
DWORD dwCookie;
hr = AtlAdvise(ptrVCProjectEngine, ptrEventsUnk,
DIID__dispVCProjectEngineEvents, &dwCookie);
The call to AtlAdvise fails (hr = -2147220992) 0x80040200 FACILITY_ITF
...
//Cleanup..
I found a thread from Brick(MSFT) but seems like some parts of the
discussion are missing. Any pointers/suggestions appreciated. Please
let me know if this is an incorrect group to post this.
Thanks
Ashwin.