我有一个ProjectA(MFC Dlg)包含usercontrol(Chart c#)
当我将项目(CTreectrl)从MFC Dlg拖动到C#图表时。
例如: http://i.stack.imgur.com/wkatk.png
将调用C#m_chartGantt_DragOver。崩溃 “Debug Assertion failed!... cmdtarg.cpp 43”
private void m_chartGantt_DragOver(object sender, DragEventArgs e)
private void m_chartGantt_DragDrop(object sender, DragEventArgs e)
我不知道如何修复它?或者它实际上不起作用? 任何评论都将不胜感激。
这是MFC代码。
void CDropButton::OnLButtonDown( UINT nFlags, CPoint point ){
COleDataSource *pDataSource = new COleDataSource();
if (DoCopyData(pDataSource))
{
pDataSource->DoDragDrop(DROPEFFECT_COPY);
}
if (pDataSource)
{
delete pDataSource; **// error here!!**
}
}
BOOL CDropTreeCtrl::DoCopyData(COleDataSource *pDataSource)
{
char szText[] = _T("Here is some sample text that was copied using a COleDataSource object!");
HGLOBAL hMem = GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE, ::lstrlen (szText) +1);
if (hMem != NULL)
{
LPSTR pData = (LPSTR) ::GlobalLock(hMem);
::lstrcpy (pData, szText);
pDataSource->CacheGlobalData(CF_UNICODETEXT, hMem);
return TRUE;
}
return FALSE;
}
修改
如果有帮助,这段代码涵盖了cmdtarg.cpp的第43行:
CCmdTarget::~CCmdTarget()
{
#ifndef _AFX_NO_OLE_SUPPORT
if (m_xDispatch.m_vtbl != 0)
((COleDispatchImpl*)&m_xDispatch)->Disconnect();
ASSERT(m_dwRef <= 1);
#endif
m_pModuleState = NULL;
}
答案 0 :(得分:1)
调用DoDragDrop后,您不必删除pDataSource。
它是一个COM对象,其生命周期仅由COM控制。
ASSERT告诉你有人试图在使用它时删除它。验证它并查看callstack。这是你的删除!