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();

我在这里做错什么,正确的做法是什么?

谢谢。

最佳答案

阅读MSDN文档中的SetClipboardData函数。看来您缺少一些步骤,过早地释放了内存。首先,你必须打电话
OpenClipboard,然后才能使用SetClipboardData。其次,系统获取传递给剪贴板的内存的所有权,并且必须将其解锁。另外,内存必须是可移动的,这需要与GlobalAlloc一起使用的GMEM_MOVEABLE标志(而不是LocalAlloc)。

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();

关于c - 如何在C中将字符串复制到剪贴板?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1264137/

10-11 07:10