Winapi 正在将字符串复制到剪贴板,粘贴时只写入一个字符

Winapi 正在将字符串复制到剪贴板,粘贴时只写入一个字符,winapi,Winapi,我是基本的一些代码关闭这一点,也提到了我的其他。该版本强制字符类型为char*,这破坏了unicode项目的编译。因此,我做了以下调整: void SetClipboardText(CString & szData) { HGLOBAL h; LPTSTR arr; size_t bytes = (szData.GetLength()+1)*sizeof(TCHAR); h=GlobalAlloc(GMEM_MOVEABLE, bytes); a

我是基本的一些代码关闭这一点,也提到了我的其他。该版本强制字符类型为
char*
,这破坏了unicode项目的编译。因此,我做了以下调整:

void SetClipboardText(CString & szData)
{
    HGLOBAL h;
    LPTSTR arr;

    size_t bytes = (szData.GetLength()+1)*sizeof(TCHAR);
    h=GlobalAlloc(GMEM_MOVEABLE, bytes);
    arr=(LPTSTR)GlobalLock(h);
    ZeroMemory(arr,bytes);
    _tcscpy_s(arr, szData.GetLength()+1, szData);
    szData.ReleaseBuffer();
    GlobalUnlock(h);

    ::OpenClipboard (NULL);
    EmptyClipboard();
    SetClipboardData(CF_TEXT, h);
    CloseClipboard();
}
复制看起来很好-在调试器Visual Studio中运行时告诉我
arr
按预期包含复制的字符串。 但当我粘贴到任何应用程序中时,只粘贴第一个字符


出了什么问题?

前面问题中的Unicode注释说明了问题。如果您有一个带有低ASCII字符的宽字符串,那么在UTF-16中,它将被编码为低ASCII字节,后跟一个NULL

很好,我从没想过第二个字节是零大小写。