Signed-off-by: Nikolay Sivov nsivov@codeweavers.com ---
It's not registered on Windows.
dlls/ole32/ole32_objidl.idl | 6 ------ 1 file changed, 6 deletions(-)
diff --git a/dlls/ole32/ole32_objidl.idl b/dlls/ole32/ole32_objidl.idl index d2c1a9999e6..0cc3ccea9e5 100644 --- a/dlls/ole32/ole32_objidl.idl +++ b/dlls/ole32/ole32_objidl.idl @@ -105,12 +105,6 @@ coclass ClassMoniker { interface IMoniker; } ] coclass PSFactoryBuffer { interface IFactoryBuffer; }
-[ - threading(apartment), - uuid(00000323-0000-0000-c000-000000000046) -] -coclass StdGlobalInterfaceTable { interface IGlobalInterfaceTable; } - [ helpstring("Component Categories Manager"), threading(both),
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/compobj.c | 26 +++++--------------------- dlls/ole32/compobj_private.h | 1 + dlls/ole32/ole32.spec | 1 + dlls/ole32/oleproxy.c | 17 +++++++++++++++++ dlls/ole32/tests/marshal.c | 8 ++++++++ 5 files changed, 32 insertions(+), 21 deletions(-)
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index 8e78519dc80..f84c12243f7 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -2755,13 +2755,14 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(
if (CLSCTX_INPROC_SERVER & dwClsContext) { - if (IsEqualCLSID(rclsid, &CLSID_InProcFreeMarshaler)) + if (IsEqualCLSID(rclsid, &CLSID_InProcFreeMarshaler) || + IsEqualCLSID(rclsid, &CLSID_GlobalOptions) || + IsEqualCLSID(rclsid, &CLSID_ManualResetEvent) || + IsEqualCLSID(rclsid, &CLSID_StdGlobalInterfaceTable)) { apartment_release(apt); - return FTMarshalCF_Create(iid, ppv); + return Ole32DllGetClassObject(rclsid, iid, ppv); } - if (IsEqualCLSID(rclsid, &CLSID_GlobalOptions)) - return IClassFactory_QueryInterface(&GlobalOptionsCF, iid, ppv); }
if (CLSCTX_INPROC & dwClsContext) @@ -2993,23 +2994,6 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx( } apartment_release(apt);
- /* - * The Standard Global Interface Table (GIT) object is a process-wide singleton. - */ - if (IsEqualIID(&clsid, &CLSID_StdGlobalInterfaceTable)) - { - IGlobalInterfaceTable *git = get_std_git(); - TRACE("Retrieving GIT\n"); - return return_multi_qi((IUnknown*)git, cmq, pResults, FALSE); - } - - if (IsEqualCLSID(&clsid, &CLSID_ManualResetEvent)) { - hres = ManualResetEvent_CreateInstance(&ManualResetEventCF, pUnkOuter, pResults[0].pIID, (void**)&unk); - if (FAILED(hres)) - return hres; - return return_multi_qi(unk, cmq, pResults, TRUE); - } - /* * Get a class factory to construct the object we want. */ diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h index 974c230ddce..1b7aa5640ce 100644 --- a/dlls/ole32/compobj_private.h +++ b/dlls/ole32/compobj_private.h @@ -325,6 +325,7 @@ extern IClassFactory GlobalInterfaceTableCF DECLSPEC_HIDDEN; extern HRESULT WINAPI ManualResetEvent_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **obj) DECLSPEC_HIDDEN; extern IClassFactory ManualResetEventCF DECLSPEC_HIDDEN; +extern HRESULT WINAPI Ole32DllGetClassObject(REFCLSID clsid, REFIID riid, void **obj) DECLSPEC_HIDDEN;
/* Exported non-interface Data Advise Holder functions */ HRESULT DataAdviseHolder_OnConnect(IDataAdviseHolder *iface, IDataObject *pDelegate) DECLSPEC_HIDDEN; diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index c83f0b27166..a8101df80bc 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -182,6 +182,7 @@ @ stdcall MkParseDisplayName(ptr wstr ptr ptr) @ stdcall MonikerCommonPrefixWith(ptr ptr ptr) @ stub MonikerRelativePathTo +@ stdcall Ole32DllGetClassObject(ptr ptr ptr) @ stdcall OleBuildVersion() @ stdcall OleConvertIStorageToOLESTREAM(ptr ptr) @ stub OleConvertIStorageToOLESTREAMEx diff --git a/dlls/ole32/oleproxy.c b/dlls/ole32/oleproxy.c index 29cd391e127..0429e0f5495 100644 --- a/dlls/ole32/oleproxy.c +++ b/dlls/ole32/oleproxy.c @@ -220,3 +220,20 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv)
return Handler_DllGetClassObject(rclsid, iid, ppv); } + +/*********************************************************************** + * Ole32DllGetClassObject [OLE32.@] + */ +HRESULT WINAPI Ole32DllGetClassObject(REFCLSID rclsid, REFIID riid, void **obj) +{ + if (IsEqualCLSID(rclsid, &CLSID_StdGlobalInterfaceTable)) + return IClassFactory_QueryInterface(&GlobalInterfaceTableCF, riid, obj); + else if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent)) + return IClassFactory_QueryInterface(&ManualResetEventCF, riid, obj); + else if (IsEqualCLSID(rclsid, &CLSID_GlobalOptions)) + return IClassFactory_QueryInterface(&GlobalOptionsCF, riid, obj); + else if (IsEqualCLSID(rclsid, &CLSID_InProcFreeMarshaler)) + return FTMarshalCF_Create(riid, obj); + else + return CLASS_E_CLASSNOTAVAILABLE; +} diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c index ef608e66d01..a6811b9d241 100644 --- a/dlls/ole32/tests/marshal.c +++ b/dlls/ole32/tests/marshal.c @@ -4000,6 +4000,10 @@ static void test_globalinterfacetable(void) ok_no_locks();
IGlobalInterfaceTable_Release(git); + + hr = CoGetClassObject(&CLSID_StdGlobalInterfaceTable, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void **)&cf); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + IClassFactory_Release(cf); }
static void test_manualresetevent(void) @@ -4016,6 +4020,10 @@ static void test_manualresetevent(void) ok(hr == S_OK, "Unexpected hr %#x.\n", hr); IClassFactory_Release(factory);
+ hr = CoGetClassObject(&CLSID_ManualResetEvent, CLSCTX_INPROC_SERVER, NULL, &IID_IClassFactory, (void **)&factory); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + IClassFactory_Release(factory); + hr = CoCreateInstance(&CLSID_ManualResetEvent, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&punk); ok(hr == S_OK, "Got 0x%08x\n", hr); ok(!!punk, "Got NULL.\n");
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=77025
Your paranoid android.
=== w8 (32 bit report) ===
ole32: marshal.c:4195: Test failed: wait failed
On Thu, Aug 13, 2020 at 07:56:27AM +0300, Nikolay Sivov wrote:
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
dlls/ole32/compobj.c | 26 +++++--------------------- dlls/ole32/compobj_private.h | 1 + dlls/ole32/ole32.spec | 1 + dlls/ole32/oleproxy.c | 17 +++++++++++++++++ dlls/ole32/tests/marshal.c | 8 ++++++++ 5 files changed, 32 insertions(+), 21 deletions(-)
I've re-sent the series with a fix for the typo in this patch's commit message.
Huw.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/compobj_private.h | 1 - dlls/ole32/git.c | 55 +++++++++++++++--------------------- 2 files changed, 23 insertions(+), 33 deletions(-)
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h index 1b7aa5640ce..b64dfbf4f4a 100644 --- a/dlls/ole32/compobj_private.h +++ b/dlls/ole32/compobj_private.h @@ -187,7 +187,6 @@ struct oletls
/* Global Interface Table Functions */ -extern IGlobalInterfaceTable *get_std_git(void) DECLSPEC_HIDDEN; extern void release_std_git(void) DECLSPEC_HIDDEN; extern HRESULT StdGlobalInterfaceTable_GetFactory(LPVOID *ppv) DECLSPEC_HIDDEN;
diff --git a/dlls/ole32/git.c b/dlls/ole32/git.c index e761c99b77c..fe6b5e58122 100644 --- a/dlls/ole32/git.c +++ b/dlls/ole32/git.c @@ -290,47 +290,38 @@ StdGlobalInterfaceTable_GetInterfaceFromGlobal( return S_OK; }
-HRESULT WINAPI GlobalInterfaceTable_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **obj) -{ - IGlobalInterfaceTable *git = get_std_git(); - HRESULT hr = IGlobalInterfaceTable_QueryInterface(git, riid, obj); - IGlobalInterfaceTable_Release(git); - return hr; -} - -/* Virtual function table */ static const IGlobalInterfaceTableVtbl StdGlobalInterfaceTableImpl_Vtbl = { - StdGlobalInterfaceTable_QueryInterface, - StdGlobalInterfaceTable_AddRef, - StdGlobalInterfaceTable_Release, - StdGlobalInterfaceTable_RegisterInterfaceInGlobal, - StdGlobalInterfaceTable_RevokeInterfaceFromGlobal, - StdGlobalInterfaceTable_GetInterfaceFromGlobal + StdGlobalInterfaceTable_QueryInterface, + StdGlobalInterfaceTable_AddRef, + StdGlobalInterfaceTable_Release, + StdGlobalInterfaceTable_RegisterInterfaceInGlobal, + StdGlobalInterfaceTable_RevokeInterfaceFromGlobal, + StdGlobalInterfaceTable_GetInterfaceFromGlobal };
-IGlobalInterfaceTable* get_std_git(void) +HRESULT WINAPI GlobalInterfaceTable_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **obj) { - if (!std_git) - { - StdGlobalInterfaceTableImpl* newGIT; - - newGIT = HeapAlloc(GetProcessHeap(), 0, sizeof(StdGlobalInterfaceTableImpl)); - if (!newGIT) return NULL; + StdGlobalInterfaceTableImpl *git;
- newGIT->IGlobalInterfaceTable_iface.lpVtbl = &StdGlobalInterfaceTableImpl_Vtbl; - list_init(&newGIT->list); - newGIT->nextCookie = 0xf100; /* that's where windows starts, so that's where we start */ - - if (InterlockedCompareExchangePointer((void**)&std_git, &newGIT->IGlobalInterfaceTable_iface, NULL)) + if (!std_git) { - HeapFree(GetProcessHeap(), 0, newGIT); + git = heap_alloc(sizeof(*git)); + if (!git) return E_OUTOFMEMORY; + + git->IGlobalInterfaceTable_iface.lpVtbl = &StdGlobalInterfaceTableImpl_Vtbl; + list_init(&git->list); + git->nextCookie = 0xf100; /* that's where windows starts, so that's where we start */ + + if (InterlockedCompareExchangePointer((void **)&std_git, &git->IGlobalInterfaceTable_iface, NULL)) + { + heap_free(git); + } + else + TRACE("Created the GIT %p\n", git); } - else - TRACE("Created the GIT at %p\n", newGIT); - }
- return std_git; + return IGlobalInterfaceTable_QueryInterface(std_git, riid, obj); }
void release_std_git(void)
We only have same machine case working, CoGetClassObject() checks already cover that.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/compobj.c | 8 -------- 1 file changed, 8 deletions(-)
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index f84c12243f7..cf1feeb3f41 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -2969,7 +2969,6 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx( { IUnknown *unk = NULL; IClassFactory *cf; - APARTMENT *apt; CLSID clsid; HRESULT hres;
@@ -2987,13 +2986,6 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx( if(FAILED(hres)) clsid = *rclsid;
- if (!(apt = apartment_get_current_or_mta())) - { - ERR("apartment not initialised\n"); - return CO_E_NOTINITIALIZED; - } - apartment_release(apt); - /* * Get a class factory to construct the object we want. */
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.c | 44 ++++++++++++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/compobj.c | 94 --------------------------------------- dlls/ole32/ole32.spec | 2 +- 4 files changed, 46 insertions(+), 96 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index edd6ac0b285..4e15bd970e8 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -1306,3 +1306,47 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *out *obj = multi_qi.pItf; return hr; } + +/*********************************************************************** + * CoCreateInstanceEx (combase.@) + */ +HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, + COSERVERINFO *server_info, ULONG count, MULTI_QI *results) +{ + IClassFactory *factory; + IUnknown *unk = NULL; + CLSID clsid; + HRESULT hr; + + TRACE("%s, %p, %#x, %p, %u, %p\n", debugstr_guid(rclsid), outer, cls_context, server_info, count, results); + + if (!count || !results) + return E_INVALIDARG; + + if (server_info) + FIXME("Server info is not supported.\n"); + + init_multi_qi(count, results, E_NOINTERFACE); + + hr = CoGetTreatAsClass(rclsid, &clsid); + if (FAILED(hr)) + clsid = *rclsid; + + hr = CoGetClassObject(&clsid, cls_context, NULL, &IID_IClassFactory, (void **)&factory); + if (FAILED(hr)) + return hr; + + hr = IClassFactory_CreateInstance(factory, outer, results[0].pIID, (void **)&unk); + IClassFactory_Release(factory); + if (FAILED(hr)) + { + if (hr == CLASS_E_NOAGGREGATION && outer) + FIXME("Class %s does not support aggregation\n", debugstr_guid(&clsid)); + else + FIXME("no instance created for interface %s of class %s, hr %#x.\n", + debugstr_guid(results[0].pIID), debugstr_guid(&clsid), hr); + return hr; + } + + return return_multi_qi(unk, count, results, TRUE); +} diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index 6698c23c76d..0daf321d69b 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -81,7 +81,7 @@ @ stdcall CoCreateFreeThreadedMarshaler(ptr ptr) @ stdcall CoCreateGuid(ptr) @ stdcall CoCreateInstance(ptr ptr long ptr ptr) -@ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr) ole32.CoCreateInstanceEx +@ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr) @ stub CoCreateInstanceFromApp @ stub CoCreateObjectInContext @ stub CoDeactivateObject diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index cf1feeb3f41..dd51542af53 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -2918,100 +2918,6 @@ HRESULT WINAPI CoResumeClassObjects(void) return S_OK; }
-static void init_multi_qi(DWORD count, MULTI_QI *mqi, HRESULT hr) -{ - ULONG i; - - for (i = 0; i < count; i++) - { - mqi[i].pItf = NULL; - mqi[i].hr = hr; - } -} - -static HRESULT return_multi_qi(IUnknown *unk, DWORD count, MULTI_QI *mqi, BOOL include_unk) -{ - ULONG index = 0, fetched = 0; - - if (include_unk) - { - mqi[0].hr = S_OK; - mqi[0].pItf = unk; - index = fetched = 1; - } - - for (; index < count; index++) - { - mqi[index].hr = IUnknown_QueryInterface(unk, mqi[index].pIID, (void**)&mqi[index].pItf); - if (mqi[index].hr == S_OK) - fetched++; - } - - if (!include_unk) - IUnknown_Release(unk); - - if (fetched == 0) - return E_NOINTERFACE; - - return fetched == count ? S_OK : CO_S_NOTALLINTERFACES; -} - -/*********************************************************************** - * CoCreateInstanceEx [OLE32.@] - */ -HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx( - REFCLSID rclsid, - LPUNKNOWN pUnkOuter, - DWORD dwClsContext, - COSERVERINFO* pServerInfo, - ULONG cmq, - MULTI_QI* pResults) -{ - IUnknown *unk = NULL; - IClassFactory *cf; - CLSID clsid; - HRESULT hres; - - TRACE("(%s %p %x %p %u %p)\n", debugstr_guid(rclsid), pUnkOuter, dwClsContext, pServerInfo, cmq, pResults); - - if (!cmq || !pResults) - return E_INVALIDARG; - - if (pServerInfo) - FIXME("() non-NULL pServerInfo not supported!\n"); - - init_multi_qi(cmq, pResults, E_NOINTERFACE); - - hres = CoGetTreatAsClass(rclsid, &clsid); - if(FAILED(hres)) - clsid = *rclsid; - - /* - * Get a class factory to construct the object we want. - */ - hres = CoGetClassObject(&clsid, dwClsContext, NULL, &IID_IClassFactory, (void**)&cf); - if (FAILED(hres)) - return hres; - - /* - * Create the object and don't forget to release the factory - */ - hres = IClassFactory_CreateInstance(cf, pUnkOuter, pResults[0].pIID, (void**)&unk); - IClassFactory_Release(cf); - if (FAILED(hres)) - { - if (hres == CLASS_E_NOAGGREGATION && pUnkOuter) - FIXME("Class %s does not support aggregation\n", debugstr_guid(&clsid)); - else - FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n", - debugstr_guid(pResults[0].pIID), - debugstr_guid(&clsid),hres); - return hres; - } - - return return_multi_qi(unk, cmq, pResults, TRUE); -} - /*********************************************************************** * CoLoadLibrary (OLE32.@) * diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index a8101df80bc..57db6e38b76 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -13,7 +13,7 @@ @ stdcall CoCreateFreeThreadedMarshaler(ptr ptr) combase.CoCreateFreeThreadedMarshaler @ stdcall CoCreateGuid(ptr) combase.CoCreateGuid @ stdcall CoCreateInstance(ptr ptr long ptr ptr) combase.CoCreateInstance -@ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr) +@ stdcall CoCreateInstanceEx(ptr ptr long ptr long ptr) combase.CoCreateInstanceEx @ stdcall CoDecrementMTAUsage(ptr) @ stdcall CoDisableCallCancellation(ptr) @ stdcall CoDisconnectObject(ptr long)
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=77028
Your paranoid android.
=== debiant (64 bit WoW report) ===
ole32: clipboard.c:1745: Test failed: got 800401d0 clipboard.c:1748: Test failed: called 4 clipboard.c:1757: Test failed: got 800401d0 clipboard.c:1760: Test failed: called 4 clipboard.c:1761: Test failed: called 1 clipboard.c:1767: Test failed: got 800401d0 clipboard.c:1770: Test failed: called 4 clipboard.c:1771: Test failed: called 1 clipboard.c:1780: Test failed: called 6 clipboard.c:1792: Test failed: called 8 clipboard.c:1802: Test failed: called 9 clipboard.c:1812: Test failed: called 10
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/combase/combase.c | 8 ++++++++ dlls/combase/combase.spec | 2 +- dlls/ole32/compobj.c | 17 ----------------- dlls/ole32/ole32.spec | 2 +- 4 files changed, 10 insertions(+), 19 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index 4e15bd970e8..5752d90d5cc 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -1350,3 +1350,11 @@ HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstanceEx(REFCLSID rclsid, IUnknown *o
return return_multi_qi(unk, count, results, TRUE); } + +/*********************************************************************** + * CoFreeUnusedLibraries (combase.@) + */ +void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibraries(void) +{ + CoFreeUnusedLibrariesEx(INFINITE, 0); +} diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec index 0daf321d69b..3214f54550c 100644 --- a/dlls/combase/combase.spec +++ b/dlls/combase/combase.spec @@ -92,7 +92,7 @@ @ stdcall CoDisconnectObject(ptr long) ole32.CoDisconnectObject @ stdcall CoEnableCallCancellation(ptr) ole32.CoEnableCallCancellation @ stdcall CoFileTimeNow(ptr) -@ stdcall CoFreeUnusedLibraries() ole32.CoFreeUnusedLibraries +@ stdcall CoFreeUnusedLibraries() @ stdcall CoFreeUnusedLibrariesEx(long long) ole32.CoFreeUnusedLibrariesEx @ stdcall CoGetActivationState(int128 long ptr) @ stub CoGetApartmentID diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index dd51542af53..f983b07f20b 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -3006,23 +3006,6 @@ void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay, DWORD apartment_freeunusedlibraries(apt, dwUnloadDelay); }
-/*********************************************************************** - * CoFreeUnusedLibraries [OLE32.@] - * - * Frees any unused libraries. Unused are identified as those that return - * S_OK from their DllCanUnloadNow function. - * - * RETURNS - * Nothing. - * - * SEE ALSO - * CoLoadLibrary, CoFreeAllLibraries, CoFreeLibrary - */ -void WINAPI DECLSPEC_HOTPATCH CoFreeUnusedLibraries(void) -{ - CoFreeUnusedLibrariesEx(INFINITE, 0); -} - /****************************************************************************** * CoLockObjectExternal [OLE32.@] * diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec index 57db6e38b76..a19264127f9 100644 --- a/dlls/ole32/ole32.spec +++ b/dlls/ole32/ole32.spec @@ -23,7 +23,7 @@ @ stdcall CoFileTimeToDosDateTime(ptr ptr ptr) kernel32.FileTimeToDosDateTime @ stdcall CoFreeAllLibraries() @ stdcall CoFreeLibrary(long) -@ stdcall CoFreeUnusedLibraries() +@ stdcall CoFreeUnusedLibraries() combase.CoFreeUnusedLibraries @ stdcall CoFreeUnusedLibrariesEx(long long) @ stdcall CoGetActivationState(int128 long ptr) combase.CoGetActivationState @ stdcall CoGetApartmentType(ptr ptr)