none
怀疑执行了剪贴板代码后,程序崩溃,请教了 RRS feed

  • 问题

  • 帮忙看一下,下面的代码有没有问题,我的程序总是莫名其妙的崩溃,现在各种迹象,都指向这段代码,可是我看不出有什么问题,求教各位了,谢谢
    VC6.0的编译环境,操作系统不支持中文,听说编译时候可以选择是unicode还是ascii,但是我不知道,我只是初学者。。。

    BOOL CMyClass::CopyToClipboard(CString source)
    {
    if( OpenClipboard() )
    {
    HGLOBAL clipbuffer;
    char * buffer;
    EmptyClipboard();
    clipbuffer = GlobalAlloc(GMEM_DDESHARE, (source.GetLength()+1) * sizeof ( TCHAR ));

    buffer = (char*)GlobalLock(clipbuffer);
    strcpy(buffer, (LPCSTR)(source)); 
    GlobalUnlock(clipbuffer);
    SetClipboardData(CF_TEXT,clipbuffer);
    CloseClipboard();
    if (clipbuffer) GlobalFree(clipbuffer);


    return TRUE;
    }

    2010年11月24日 3:46

答案

全部回复

  • 程序崩溃有什么报错信息么

    你说各种迹象指向这段代码

    什么迹象?

    另外source的数据你确保是安全的么

    2010年11月25日 1:16
  • 你好,

    可以提供你在调试时出现错误的信息么?它报什么错误?Access Violation?

    关于剪贴板的操作,建议你参考一下这个代码示例:http://www.codeproject.com/KB/clipboard/archerclipboard1.aspx

    Yi


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2010年11月26日 9:38
    版主
  • 可能是你分配的内存不够,越界了,检查检查


    0xBAADF00D
    2010年11月28日 14:25
    版主
  • source是安全的,测试的时候注释掉这段代码程序就没问题,加上就有问题

    调试很难抓到错误,因为出错没有规律,有时候几次就出来,有时候好几次都不出来,运行得时候报内存读写错误

    开始怀疑内存分配不够,所以才乘以 sizeof ( TCHAR ),后来debug几次,发现都是够的

    最后谢谢各位了,后来我压力测试了一下,不停的循环调用那段代码,最终发现
    clipbuffer = GlobalAlloc(GMEM_DDESHARE, (source.GetLength()+1) * sizeof ( TCHAR ));这句话,GMEM_DDESHARE换成GHND就不崩溃。。。

    可是这时为什么呢?有高人能指点一下吗?

     

    2010年12月2日 8:44