+ -
当前位置:首页 → 问答吧 → 我用win32 API DoDragDrop 实现脱放,调用DoDragDrop时出现非法地址访问

我用win32 API DoDragDrop 实现脱放,调用DoDragDrop时出现非法地址访问

时间:2011-11-30

来源:互联网

我自己实现了IDataObject,IDropSource

FORMATETC fmtetc = {CF_UNICODETEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
STGMEDIUM stgmed = {TYMED_HGLOBAL, {0}, 0};
stgmed.hGlobal = StringToHandle (L"Hello, World!", -1);

if (CreateDataObject(&fmtetc, &stgmed, 1, &pDataObject) != S_OK)
{
  return FALSE;
}
if( CreateDropSource(&pDropSource) != S_OK )
{
  return FALSE;
}
DWORD dwResult = DoDragDrop(pDataObject,pDropSource,DROPEFFECT_MOVE|DROPEFFECT_COPY,&dwEffect);
if( dwResult == DRAGDROP_S_DROP )
{
if( dwEffect == DROPEFFECT_MOVE )
  {
}
}
pDropSource->Release();
pDataObject->Release();
ReleaseStgMedium(&stgmed);

我准备好了,IDataObject对象,和IDropSource对象,然后调用 DoDragDrop,如上所示,但是一旦我松开鼠标左键,DoDragDrop便会出现非法地址访问,但那句“hello world”确实传递成功了,鼠标释放时,所在窗口里显示了“hello world”。

不知哪里除了问题?

作者: ondarkness   发布时间: 2011-11-30

不调用后面三句有异常吗
pDropSource->Release();
pDataObject->Release();
ReleaseStgMedium(&stgmed);

作者: fishion   发布时间: 2011-12-01