I'm currently maintaining a piece of software that we outsourced couple of years ago and that is poorly documented. The piece is a COM server for consuming by third-party applications and an installer that does all necessary deployment.
There's the core compiled as 32-bit DLL and meant to be used from 32-bit applications. And there's also a shim compiled as 64-bit DLL and intended for being used from 64-bit applications. The shim calls CoCreateInstance() to instantiate the core and redirects the calls to the core. The core depends on a huge set of other 32-bit libraries.
The 32-bit core is registered exactly as an in-proc server normally would - there's an entry under HKCR\CLSID that includes the core class id and the path to the library under InprocServer32. The 64-bit shim is registered the same way and also an Application Id is introduced for the 64-bit shim - it is added under HKCR\CLSID and also registered with DCOM - there's an entry in the DCOM console with that Application Id.
Now the DCOM registration looks strange. Why would the shim be registered to DCOM and not the core? I expect that the 32-bit core should be registered to DCOM to be instantiated in a separate process and shielded from the 64-bit consumer. But apparently it works as it is currently done. What's the sence in registering the 64-bit shim and not the 32-bit core with DCOM?