From 4cbca9ac3a7d38e5f16bc235864b5f692c35d183 Mon Sep 17 00:00:00 2001 From: Rob Shearman Date: Mon, 7 May 2007 23:56:43 +0100 Subject: [PATCH] ole32: Add test for registered class becoming invalid when apartment is destroyed. --- dlls/ole32/tests/compobj.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index 43891e63ed2..f07c95ea8cd 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -651,6 +651,7 @@ static void test_CoRegisterClassObject(void) }; /* 5201163f-8164-4fd0-a1a2-5d5a3654d3bd */ DWORD cookie; HRESULT hr; + IClassFactory *pcf; pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); @@ -699,6 +700,22 @@ static void test_CoRegisterClassObject(void) 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); + ok_ole_success(hr, "CoRegisterClassObject"); + + CoUninitialize(); + pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + + hr = CoGetClassObject(&CLSID_WineOOPTest, CLSCTX_INPROC_SERVER, NULL, + &IID_IClassFactory, (void **)&pcf); + ok(hr == REGDB_E_CLASSNOTREG, "object registered in an apartment shouldn't accessible after it is destroyed\n"); + + /* crashes with at least win9x DCOM! */ + if (0) + hr = CoRevokeClassObject(cookie); + CoUninitialize(); }