【发布时间】:2011-02-11 01:26:30
【问题描述】:
我尝试使用 IDataObject 将一些文本放入剪贴板。但是 GlobalUnlock 失败了。我做错了什么?
IDataObject *obj;
HRESULT ret;
assert(S_OK == OleGetClipboard(&obj));
FORMATETC fmtetc = {0};
fmtetc.cfFormat = CF_TEXT;
fmtetc.dwAspect = DVASPECT_CONTENT;
fmtetc.lindex = -1;
fmtetc.tymed = TYMED_HGLOBAL;
STGMEDIUM medium = {0};
medium.tymed = TYMED_HGLOBAL;
char* str = "string";
medium.hGlobal = GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, strlen(str)+1);
char* pMem = (char*)GlobalLock(medium.hGlobal);
strcpy(pMem,str);
assert(GlobalUnlock(medium.hGlobal) != 0); // !!! ERROR
assert(S_OK == obj->SetData(&fmtetc,&medium,TRUE));
assert(S_OK == OleSetClipboard(obj));
【问题讨论】:
-
那么,当 GlobalUnlock() 失败时,GetLastError() 是什么?另外,你确定 GlobaAlloc() 和 GlobalLock() 成功了吗?
-
GetLastError 在失败时不包含任何信息。而且,alloc/lock 没有问题。