代码如下:GlobalAlloc申请的剪切板内存复制数据完后不能释放掉,一用GlobalFree(hMemory);就出错,这是为什么呢?
if(!OpenClipboard(NULL)) // 打开剪切板,打开后,其他进程无法访问
{
TRACE(_T("剪切板打开失败,错误代码为:%d\n"),GetLastError());
return;
}
if(!EmptyClipboard()) // 清空剪切板,写入之前,必须先清空剪切板
{
TRACE(_T("清空剪切板失败,错误代码为:%d\n"),GetLastError());
CloseClipboard();
return;
}
//复制数据
HGLOBAL hMemory;
int nContentSize = (int)(t_strlen(lpStr)+1)*sizeof(TCHAR);
if((hMemory = GlobalAlloc(GMEM_MOVEABLE, nContentSize)) == NULL)
{
TRACE(_T("Alloc memory failure!"));
return;
}
LPTSTR lpMemory = (LPTSTR)GlobalLock(hMemory);
memcpy(lpMemory,lpStr,nContentSize);
GlobalUnlock(hMemory);
if(SetClipboardData(CF_UNICODETEXT, hMemory) == NULL)
{
TRACE(_T("设置剪切板数据失败!错误代码为:%d\n"),GetLastError());
}
CloseClipboard();
//GlobalFree(hMemory);