Подскажите, плиз, по поводу COleDataSource.
Пытаюсь починить древний код, юзающий MFC.
https://github.com/dmitry-lipetsk/cvsgui/blob/05977436ac2a64ba4ac4dd3e85a62ea566a9d3f5/WinCvs/BrowseFileView.cpp#L2851-L2853
COleDataSource ds;
ds.CacheGlobalData( CF_HDROP, hMem );
ds.DoDragDrop( DROPEFFECT_COPY );
Вылазит ассерт в глубинах деструктора ~COleDataSource.
CCmdTarget::~CCmdTarget()
{
#ifndef _AFX_NO_OLE_SUPPORT
if (m_xDispatch.m_vtbl != 0)
((COleDispatchImpl*)&m_xDispatch)->Disconnect();
ASSERT(m_dwRef <= 1); // <------------- ВОТ ЗДЕСЬ. m_dwRef равен 4.
#endif
m_pModuleState = NULL;
}
Я добавил вызов ds.Empty() и AV вроде перестала вылазить.
COleDataSource ds;
ds.CacheGlobalData( CF_HDROP, hMem );
ds.DoDragDrop( DROPEFFECT_COPY );
ds.Empty(); // <----- Помогло, вроде.
Это нормальный костыль?
Дополнительная информация. На Win7 у меня AV не вылазил. На Win10 вылазит.
Программулина компилируется в VS2010.
Заранее благодарю всех, кто даст толковые советы и камменты
UPD. Костыль не работает. Есть еще вариант — переместить ds на уровень класса, тогда AV будет вылазить только один раз — при закрытии
-- Пользователи не приняли программу. Всех пришлось уничтожить. --