Re: dllregisterserver not registering com classes by PaulH
PaulH
Wed Jul 19 08:42:11 CDT 2006
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