ole32/ole2: Don't call IDropTarget::QueryInterface() in RegisterDragDrop(). [whitespace fixed]

Adam Martinson amartinson at codeweavers.com
Wed May 25 12:36:26 CDT 2011


On 05/24/2011 03:37 AM, Huw Davies wrote:
>> +static IDropTarget* WrapDropTarget(IDropTarget* inner)
>> +{
>> +    DropTargetWrapper* This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
>> +
>> +    if (This)
>> +    {
>> +        This->iface = (IDropTarget){&DropTargetWrapper_VTbl };
> This->iface.lpVtbl =&DropTargetWrapper_VTbl;
>
>> -  hr = CoMarshalInterface(stream,&IID_IDropTarget, unk, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG);
>> -  IUnknown_Release(unk);
>> +  hr = CoMarshalInterface(stream,&IID_IDropTarget, (IUnknown*)wrapper, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG);
>>
>>     if(SUCCEEDED(hr))
>>     {
>>       hr = create_map_from_stream(stream,&map);
>>       if(SUCCEEDED(hr))
>>       {
>> -      IDropTarget_AddRef(pDropTarget);
>>         SetPropW(hwnd, prop_oledroptarget, pDropTarget);
> You probably want to set the window prop to the wrapper here.  Either
> way you still need the AddRef (on the wrapper if you set that), it
> gets released in RevokeDragDrop.
>
> Huw.

The AddRef is done in WrapDropTarget(), seems like the appropriate place 
for it.  Quite right on the rest though, thanks.



More information about the wine-devel mailing list