[1/2] shdocvw: Added support for IAdviseSink (resend)

Jacek Caban jacek at codeweavers.com
Thu Aug 6 18:28:29 CDT 2009


Hi Alistair,

Alistair Leslie-Hughes wrote:
> Hi,
>
> Could I get some feedback on this patch please?
>
+    HRESULT hr = E_INVALIDARG;
+
+    TRACE("(%p)->(%p, %p)\n", This, pAdvSink, pdwConnection);
+
+    if(!pdwConnection || !pAdvSink)
+        return hr;
+
+    if(!This->holder)
+    {
+        hr = CreateOleAdviseHolder(&This->holder);
+        if(FAILED(hr))
+            ERR("CreateOleAdviseHolder failed\n");
+    }
+
+    if(hr == S_OK && This->holder)
+    {
+        hr = IOleAdviseHolder_Advise(This->holder, pAdvSink, pdwConnection);
+    }
+
+    return hr;


It's a matter of taste, but you complicate things here. You could 
achieve the same effect easier:

    TRACE("(%p)->(%p, %p)\n", This, pAdvSink, pdwConnection);

    if(!pdwConnection || !pAdvSink)
        return E_INVALIDARG;

    if(!This->holder) {
        HRESULT hr = CreateOleAdviseHolder(&This->holder);
        if(FAILED(hr)) {
            ERR("CreateOleAdviseHolder failed\n");
            return hr;
        }
    }

    return IOleAdviseHolder_Advise(This->holder, pAdvSink, pdwConnection);


Also you don't really add support for IAdviseSink. You only store and 
never use it and your test don't document missing functionality. It 
would be nice not to call Unadvise just after Advise, but keep it 
advised and properly test (with todo_wine for now). It's easy to do by 
adding something like
trace(#func "\n"); \
to CHECK_EXPECT2 and running the test on Windows. Then you can easily 
guess when the callback should be called and add corresponding 
SET_EXPECT/CHECK_CALLED macros. Note that, although it's not needed for 
tests to success, these macros are kept in order of calling as much as 
possible for documentation purposes.

If you're not going to extend tests, please leave FIXME messages. 
Otherwise you hide the problem with no evidence.


Thanks,
    Jacek



More information about the wine-devel mailing list