/* Handle cfShellIDList Drop objects here, otherwise send the approriate message to other software */
if (SUCCEEDED(pDataObject->QueryGetData(&fmt))) {
- pDataObject->AddRef();
- SHCreateThread(DoDeleteThreadProc, pDataObject, NULL, NULL);
+ IStream *s;
+ CoMarshalInterThreadInterfaceInStream(IID_IDataObject, pDataObject, &s);
+ SHCreateThread(DoDeleteThreadProc, s, NULL, NULL);
}
else
{
DWORD WINAPI DoDeleteThreadProc(LPVOID lpParameter)
{
- IDataObject *pda = (IDataObject*) lpParameter;
- DoDeleteDataObject(pda);
- //Release the data object
- pda->Release();
+ CoInitialize(NULL);
+ CComPtr<IDataObject> pDataObject;
+ HRESULT hr = CoGetInterfaceAndReleaseStream (static_cast<IStream*>(lpParameter), IID_PPV_ARG(IDataObject, &pDataObject));
+ if (SUCCEEDED(hr))
+ {
+ DoDeleteDataObject(pDataObject);
+ }
+ CoUninitialize();
return 0;
}