I was able to modify my client code to do this
if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
{
HRESULT res = CoGetClassObject(g\_MycfgCLSID , CLSCTX\_ALL , NULL , IID\_IClassFactory , (void \*\*)&pClassFactory );
if(SUCCEEDED(res))
{
// res = pUnknown->QueryInterface(IID\_IAdd,(void \*\*)&pAdd);
res = pClassFactory->CreateInstance(0,IID\_IAdd , (void \*\*)&pAdd);
pClassFactory->Release();
}
else if(res == E\_NOINTERFACE )
{
int x = 1;
}
else if(res == E\_INVALIDARG)
{
int r = GetLastError() ;
}
CoUninitialize();
}
The call to
HRESULT res = CoGetClassObject(g_MycfgCLSID , CLSCTX_ALL , NULL , IID_IClassFactory , (void **)&pClassFactory );
succeeds providing a pointer to IClassFactory However this line
res = pClassFactory->CreateInstance(0,IID_IAdd , (void **)&pAdd);
returns the following error
#define REGDB_E_IIDNOTREG _HRESULT_TYPEDEF_(0x80040155L)
Engineering is the effort !