COM dll and CoCreateInstance returned 80040111
Hi,
I am trying to intercept call to the Pocket Outlook API ( a COM dll),
so in the registry I have replaced the dll declaration:
HKEY_CLASSES_ROOT\\CLSID\\{05058F23-20BE-11D2-8F18-0000F87A4335}
+InProcServer32
_T(""), _T("pimstore.dll") );
_T("ThreadingModel"), _T("Free") );
+ProgID
_T(""), _T("PocketOutlook.Application") );
(replaced pimstore.dll by melstore.dll (my COM dll))
and I have created two new entries :
one with a new CLSID and a new ProgID that points to the original COM dll.
HKEY_CLASSES_ROOT\\CLSID\\{05058F24-20BC-10D2-8E18-0000F87A4335}
+InProcServer32
_T(""), _T("pimstore.dll") );
_T("ThreadingModel"), _T("Free") );
+ProgID
_T(""), _T("OrgPocketOutlook.Application") );
It means that when Pocket Outlook is asking for PocketOutlook.Application,
my dll(melstore.dll) is loaded instead of pimstore.dll.
Inside my COM dll, I would like to call the original dll. To do so I am
trying this
STDMETHODIMP CPOutlookApp::QueryInterface(REFIID riid, LPVOID FAR *ppv)
{
HRESULT hr = 0;
CLSID clsid;
LPOLESTR pProgID = L"OrgPocketOutlook.Application"; //Origi. Dll
hr = CoInitializeEx(NULL, 0);
Log( _T("CoInitializeEx returned %x\n"), hr);
hr = CLSIDFromProgID(pProgID, &clsid);
Log( _T("CLSIDFromProgID returned %x\n"), hr);
hr = m_pPOOMApp.CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER);
Log( _T("m_pPOOMApp.CoCreateInstance returned %x\n"), hr);
return hr;
}
Log:
CoInitializeEx returned 1
CLSIDFromProgID returned 0
The problem is I alway get a 0x80040111 returned by
m_pPOOMApp.CoCreateInstance.
Do I need to do something else ?