复制文本到粘贴板第二次就出错。

aj3423 2012-06-16 10:02:10
HGLOBAL hGlobal = GlobalAlloc(GHND|GMEM_SHARE, 1024);

bool clipboard_set_str(const string& s) {
char* mem = (char*)GlobalLock(hGlobal);
if(mem==NULL) {
printf("GlobalLock err\n");
return false;
}
strcpy(mem, (char*)s.c_str());
GlobalUnlock(hGlobal);

if(!OpenClipboard(NULL)) {
printf("OpenClipboard err\n");
return false;
}
if(!EmptyClipboard()) {
printf("EmptyClipboard err\n");
return false;
}
if(SetClipboardData(CF_TEXT, hGlobal) == NULL) {
printf("SetClipboardData err: %d\n", GetLastError());
return false;
}
if(!CloseClipboard()) {
printf("CloseClipboard err\n");
return false;
}
return true;
}

int main() {
clipboard_set_str("aaaaa");
// clipboard_set_str("BBBBB");// 如果注释掉这个,粘贴板里能有之前的 aaaaa,如果打开这行就报错

// GlobalFree(hGlobal);
}


不好意思 分不多了。。
...全文
87 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
aj3423 2012-06-16
  • 打赏
  • 举报
回复
多谢。我说网上的代码怎么都不用GlobalFree也不怕泄露的
zgl7903 2012-06-16
  • 打赏
  • 举报
回复
EmptyClipboard 会释放分配的内存
因此把 HGLOBAL hGlobal = GlobalAlloc(……); 移到函数内, 每次都重新分配内存
另外函数太多return 容易导致内存泄漏和句柄泄漏 适当修改下程序结构

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧