atl100: Added AtlComModuleUnregisterServer implementation.

oldstable
Jacek Caban 2013-01-14 13:03:13 +01:00 committed by Alexandre Julliard
parent d70ab45fc5
commit ca5ded2873
4 changed files with 53 additions and 2 deletions

View File

@ -453,6 +453,56 @@ HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE *pm, REFCLSID rclsid,
return CLASS_E_CLASSNOTAVAILABLE;
}
/***********************************************************************
* AtlComModuleUnregisterServer [atl100.22]
*/
HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE *mod, BOOL bRegTypeLib, const CLSID *clsid)
{
const struct _ATL_CATMAP_ENTRY *catmap;
_ATL_OBJMAP_ENTRY **iter;
HRESULT hres;
TRACE("(%p %x %s)\n", mod, bRegTypeLib, debugstr_guid(clsid));
for(iter = mod->m_ppAutoObjMapFirst; iter < mod->m_ppAutoObjMapLast; iter++) {
if(!*iter || (clsid && !IsEqualCLSID((*iter)->pclsid, clsid)))
continue;
TRACE("Unregistering clsid %s\n", debugstr_guid((*iter)->pclsid));
catmap = (*iter)->pfnGetCategoryMap();
if(catmap) {
hres = AtlRegisterClassCategoriesHelper((*iter)->pclsid, catmap, FALSE);
if(FAILED(hres))
return hres;
}
hres = (*iter)->pfnUpdateRegistry(FALSE);
if(FAILED(hres))
return hres;
}
if(bRegTypeLib) {
ITypeLib *typelib;
TLIBATTR *attr;
BSTR path;
hres = AtlLoadTypeLib(mod->m_hInstTypeLib, NULL, &path, &typelib);
if(FAILED(hres))
return hres;
SysFreeString(path);
hres = ITypeLib_GetLibAttr(typelib, &attr);
if(SUCCEEDED(hres))
hres = UnRegisterTypeLib(&attr->guid, attr->wMajorVerNum, attr->wMinorVerNum, attr->lcid, attr->syskind);
ITypeLib_Release(typelib);
if(FAILED(hres))
return hres;
}
return S_OK;
}
/***********************************************************************
* AtlRegisterClassCategoriesHelper [atl100.49]
*/

View File

@ -6,7 +6,7 @@
15 stdcall AtlComModuleGetClassObject(ptr ptr ptr ptr)
17 stub AtlComModuleRegisterClassObjects
20 stub AtlComModuleRevokeClassObjects
22 stub AtlComModuleUnregisterServer
22 stdcall AtlComModuleUnregisterServer(ptr long ptr)
23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr)
24 stdcall AtlWaitWithMessageLoop(long)
25 stub AtlSetErrorInfo

View File

@ -8,7 +8,7 @@
18 stdcall AtlComModuleRegisterServer(ptr long ptr)
19 stdcall AtlRegisterTypeLib(ptr wstr)
20 stub AtlComModuleRevokeClassObjects
22 stub AtlComModuleUnregisterServer
22 stdcall AtlComModuleUnregisterServer(ptr long ptr) atl100.AtlComModuleUnregisterServer
23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr) atl100.AtlUpdateRegistryFromResourceD
24 stdcall AtlWaitWithMessageLoop(long) atl100.AtlWaitWithMessageLoop
25 stub AtlSetErrorInfo

View File

@ -255,6 +255,7 @@ HRESULT WINAPI AtlLoadTypeLib(HINSTANCE,LPCOLESTR,BSTR*,ITypeLib**);
HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE,LPCOLESTR);
HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID,const struct _ATL_CATMAP_ENTRY*,BOOL);
HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE*,REFCLSID,REFIID,void**);
HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE*,BOOL,const CLSID*);
BOOL WINAPI AtlWaitWithMessageLoop(HANDLE);
#endif /* __WINE_ATLBASE_H__ */