DWORD len;
TRACE("(%p,%p,%s)\n", hDll, pProxyFileList, debugstr_guid(pclsid));
- format_clsid( clsid, pclsid );
+
+ //if (!hDll) return E_HANDLE;
+ if (!pProxyFileList || !*pProxyFileList) return E_NOINTERFACE;
+
+ if (pclsid)
+ format_clsid( clsid, pclsid );
+ else if ((*pProxyFileList)->TableSize > 0)
+ format_clsid( clsid,(*pProxyFileList)->pStubVtblList[0]->header.piid);
+ else
+ return E_NOINTERFACE;
/* register interfaces to point to clsid */
while (*pProxyFileList) {
static const WCHAR clsidW[] = {'C','L','S','I','D','\\',0};
static const WCHAR interfaceW[] = {'I','n','t','e','r','f','a','c','e','\\',0};
WCHAR keyname[50];
+ WCHAR clsid[39];
TRACE("(%p,%p,%s)\n", hDll, pProxyFileList, debugstr_guid(pclsid));
+ if (pclsid)
+ format_clsid( clsid, pclsid );
+ else if ((*pProxyFileList)->TableSize > 0)
+ format_clsid( clsid,(*pProxyFileList)->pStubVtblList[0]->header.piid);
+ else
+ return E_NOINTERFACE;
/* unregister interfaces */
while (*pProxyFileList) {
/* unregister clsid */
strcpyW( keyname, clsidW );
- format_clsid( keyname + strlenW(keyname), pclsid );
+ strcatW( keyname, clsid );
RegDeleteTreeW(HKEY_CLASSES_ROOT, keyname);
return S_OK;