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