该SetClipboardData功能需要HANDLE参考;我在转换要在函数中使用的字符串时遇到麻烦。
这是我的代码:
char* output = "Test"; HLOCAL hMem = LocalAlloc( LHND,1024); char* cptr = (char*) LocalLock(hMem); memcpy( cptr, output, 500 ); SetClipboardData(CF_TEXT, hMem); LocalUnlock( hMem ); LocalFree( hMem ); CloseClipboard();
我在这里做错什么,正确的做法是什么?
谢谢。
阅读有关SetClipboardData函数的MSDN文档。看来您缺少一些步骤,过早地释放了内存。首先,必须先调用 OpenClipboard,然后才能使用SetClipboardData。其次,系统获取传递给剪贴板的内存的所有权,并且必须将其解锁。此外,内存必须是可移动的,这需要与GlobalAlloc(而不是LocalAlloc)一起使用的GMEM_MOVEABLE标志。
const char* output = "Test"; const size_t len = strlen(output) + 1; HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len); memcpy(GlobalLock(hMem), output, len); GlobalUnlock(hMem); OpenClipboard(0); EmptyClipboard(); SetClipboardData(CF_TEXT, hMem); CloseClipboard();