On Tue, Jan 13, 2009 at 3:09 AM, Paul Vriens <paul.vriens.w...@gmail.com> wrote: > Austin English wrote: >> >> On Tue, Jan 13, 2009 at 2:20 AM, Paul Vriens <paul.vriens.w...@gmail.com> >> wrote: >>> >>> Austin English wrote: >>>> >>>> On Tue, Jan 13, 2009 at 1:28 AM, Paul Vriens >>>> <paul.vriens.w...@gmail.com> >>>> wrote: >>>>> >>>>> Austin English wrote: >>>>>> >>>>>> Pointed out by Anastasius in bug 13011. Tested on XP SP2 & 2K SP4 (and >>>>>> Wine, of course). >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------ >>>>>> >>>>>> >>>>> Hi Austin, >>>>> >>>>> The test case that is pointed out in bug 13011 is different though: >>>>> >>>>> hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); >>>>> ok(hr == S_OK, "CoInitializeEx failed with error 0x%08x\n", hr); >>>>> hr = OleInitialize(NULL); >>>>> ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr); >>>>> >>>>> The above succeeds on W2K3 but fails on Wine. >>>>> >>>>> -- >>>>> Cheers, >>>>> >>>>> Paul. >>>>> >>>> I was referring to this comment: >>>> "Calling OleInitialize() for the first time should yield S_OK - even >>>> with >>>> apartment already initialized by previous CoInitialize(Ex) calls. >>>> Calling OleInitialize() more than once yields S_FALSE for the second and >>>> following calls." >>>> >>>> Though that testcase should probably be added as well, in a todo_wine of >>>> course. >>>> >>>> >>>> >>> So maybe we should do >>> >>> hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); >>> ok(hr == S_OK, "CoInitializeEx failed with error 0x%08x\n", hr); >>> hr = OleInitialize(NULL); >>> todo_wine >>> ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr); >>> hr = OleInitialize(NULL); >>> ok(hr == S_FALSE, "Expected S_FALSE, hr = 0x%08x\n", hr); >>> >>> and move that to a separate test function? (Maybe in compobj.c?) I mean >>> it's >>> a ole32 basic thing that's wrong, not something that should be in a >>> specific >>> test I guess? >>> >>> -- >>> Cheers, >>> >>> Paul. >>> >> >> How's this? >> >> > Looks great :). Two (minor) things though: > > - you should maybe use pCoInitializeEx? (there is some remark in that file > about it not being present on all platforms, current test.winehq.org doesn't > show this though) > - do some uninitialize to clean things up? > > -- > Cheers, > > Paul. >
I haven't tested on windows though. I can test it later today before submitting to wine-patches [though I'm sure you'll beat me to it ;-)]. -- -Austin
diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index 02dc080..450db78 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -1017,6 +1017,27 @@ static void test_CoGetObjectContext(void) CoUninitialize(); } +static void test_CoInitializeEx(void) +{ + HRESULT hr; + + hr = pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + ok(hr == S_OK, "CoInitializeEx failed with error 0x%08x\n", hr); + + /* Calling OleInitialize for the first time should yield S_OK even with + * apartment already initialized by previous CoInitialize(Ex) calls. */ + hr = OleInitialize(NULL); + todo_wine ok(hr == S_OK, "OleInitialize failed with error 0x%08x\n", hr); + + /* Subsequent calls to OleInitialize should return S_FALSE */ + hr = OleInitialize(NULL); + ok(hr == S_FALSE, "Expected S_FALSE, hr = 0x%08x\n", hr); + + /* Cleanup */ + CoUninitialize(); + OleUninitialize(); +} + START_TEST(compobj) { HMODULE hOle32 = GetModuleHandle("ole32"); @@ -1045,4 +1066,5 @@ START_TEST(compobj) test_registered_object_thread_affinity(); test_CoFreeUnusedLibraries(); test_CoGetObjectContext(); + test_CoInitializeEx(); }