以下の様なコードで,COleDataSource::DoDragDrop の部分がすぐ抜ける.
CStringArray sa ;
::ListBoxToStringArray(m_DropList,&sa,TRUE) ;
{
CByteArray ba ;
::StringArrayToString2Z(sa,&ba) ;
int len = ba.GetSize() ;
HDROP hDrop = (HDROP)::GlobalAlloc(GHND,sizeof(DROPFILES) + len + sizeof(TCHAR)) ;
if (hDrop == NULL) { return ; }
LPDROPFILES lpdf = (LPDROPFILES)::GlobalLock(hDrop) ;
lpdf->pFiles= sizeof(DROPFILES) ;
lpdf->pt.x = 0 ;
lpdf->pt.y = 0 ;
lpdf->fNC = FALSE ;
lpdf->fWide = FALSE ;
#ifdef _UNICODE
lpdf->fWide = TRUE ;
#endif
LPCTSTR lpFileNames = LPCTSTR(LPCSTR(lpdf)+lpdf->pFiles) ;
memmove(LPVOID(lpFileNames),ba.GetData(),len) ;
::GlobalUnlock(hDrop) ;
{
COleDataSource* ods = new COleDataSource ;
ods->CacheGlobalData(CF_HDROP,hDrop) ;
ods->DoDragDrop() ;
delete ods ;
}
}
AfxOleInit() を呼出していなかった.
[VC50] Windows 95 標準コントロールのドラッグアンドドロップサンプル
http://support.microsoft.com/kb/152092/ja
2014/08/11 追記
上のコードで,delete ods はうまくない.
データ オブジェクトとデータ ソース : 作成と破棄