Re: dllregisterserver not registering com classes
I don't have any BEGIN_OBJECT_MAP entries, but I think as of VC7, ATL
switched to using OBJECT_ENTRY_AUTO() macros instead. I'm using VS
2005, if that helps.
I do have an OBJECT_ENTRY_AUTO() macro at the bottom of my
wizard-generated IMyModule.h
OBJECT_ENTRY_AUTO(__uuidof(IMyModule), CIMyModule)
as well as a COM_MAP entry in my CIMyModule() class
DECLARE_REGISTRY_RESOURCEID(IDR_IMYMODULE)
BEGIN_COM_MAP(CIMyModule)
COM_INTERFACE_ENTRY(IIMyModule)
COM_INTERFACE_ENTRY2(IDispatch, IComponentRegistrar)
COM_INTERFACE_ENTRY(IComponentRegistrar)
END_COM_MAP()
I wasn't entirely correct before, though. The interface is being
properly put in to the registry, it's only that when I try to access
it, I get the REGDB_E_CLASSNOTREG error from:
{
//...
MyModuleLib::IIMyModulePtr pModule = NULL;
HRESULT hr = pModule.CreateInstance(TEXT("MyModule.IMyModule"));
//...
}
-PaulH
Stuart Redmann wrote:
PaulH wrote:
I have a COM DLL (created with the ATL COM wizard). It comes with the
function:
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
HRESULT hr = _AtlModule.DllRegisterServer();
return hr;
}
This function does get called when the object is registered, but none
of the interfaces I have defined get registered.
Do I need to put code in to manually register my objects? What does
that function register, then?
Thanks,
-PaulH
Have you checked, that each COM class is in the object map of your
server? Opening the .cpp file of the server, you should find something
like that:
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_<your COM class>, <class name of implementation>)
END_OBJECT_MAP()
Regards,
Stuart