Я наконец решил свою проблему с этим кодом: (CoRegisterClassObject все еще не работает!)
HRESULT hr;
CYourObject *your = new CComObject<CYourObject>();
void *p = NULL;
your->QueryInterface(IID_IUnknown,&p);
IUnknown *var = (IUnknown*)p;
DWORD pdwRegister;
IRunningObjectTable *pROT;
IMoniker *pMon;
LPOLESTR monikerName;
hr = GetRunningObjectTable(NULL,&pROT);
hr = StringFromCLSID(CLSID_YourObject, &monikerName);
LPOLESTR delim = L"!"; // moniker delimiter (set to ! always)
hr = CreateItemMoniker(delim,monikerName,&pMon);
hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE,var,pMon,&pdwRegister);
CLSID id;
hr = CLSIDFromProgID(L"MyAtlProject.YourObject",&id);