Module: wine Branch: master Commit: d963e97f32249ba25128be7f890b3eb55e9db9a0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d963e97f32249ba25128be7f89...
Author: Rob Shearman robertshearman@gmail.com Date: Fri Nov 20 14:48:57 2009 +0000
ole32: Objects registered as local servers don't need to support IClassFactory.
---
dlls/ole32/compobj.c | 2 +- dlls/ole32/tests/compobj.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index c8c4808..580f4d3 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -2130,7 +2130,7 @@ HRESULT WINAPI CoRegisterClassObject( FIXME("Failed to create stream on hglobal, %x\n", hr); return hr; } - hr = CoMarshalInterface(newClass->pMarshaledData, &IID_IClassFactory, + hr = CoMarshalInterface(newClass->pMarshaledData, &IID_IUnknown, newClass->classObject, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG); if (hr) { diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index 5ddfc11..e868014 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -837,6 +837,14 @@ static void test_CoRegisterClassObject(void) hr = CoRevokeClassObject(cookie); ok_ole_success(hr, "CoRevokeClassObject");
+ /* test whether an object that doesn't support IClassFactory can be + * registered for CLSCTX_LOCAL_SERVER */ + hr = CoRegisterClassObject(&CLSID_WineOOPTest, &Test_Unknown, + CLSCTX_LOCAL_SERVER, REGCLS_SINGLEUSE, &cookie); + ok_ole_success(hr, "CoRegisterClassObject"); + hr = CoRevokeClassObject(cookie); + ok_ole_success(hr, "CoRevokeClassObject"); + /* test whether registered class becomes invalid when apartment is destroyed */ hr = CoRegisterClassObject(&CLSID_WineOOPTest, (IUnknown *)&Test_ClassFactory, CLSCTX_INPROC_SERVER, REGCLS_SINGLEUSE, &cookie);