+ wxCHECK_MSG( data, FALSE, wxT("data is invalid") );
+
+#if wxUSE_OLE_CLIPBOARD
+ HRESULT hr = OleSetClipboard(data->GetInterface());
+ if ( FAILED(hr) )
+ {
+ wxLogSysError(hr, _("Failed to put data on the clipboard"));
+
+ // don't free anything in this case
+
+ return FALSE;
+ }
+
+ // we have a problem here because we should delete wxDataObject, but we
+ // can't do it because IDataObject which we just gave to the clipboard
+ // would try to use it when it will need the data. IDataObject is ref
+ // counted and so doesn't suffer from such problem, so we release it now
+ // and tell it to delete wxDataObject when it is deleted itself.
+ data->SetAutoDelete();
+
+ // we have to call either OleSetClipboard(NULL) or OleFlushClipboard() when
+ // using OLE clipboard when the app terminates - by default, we call
+ // OleSetClipboard(NULL) which won't waste RAM, but the app can call
+ // wxClipboard::Flush() to chaneg this
+ m_clearOnExit = TRUE;