我正在尝试创建一个文件,其中参数之一已传递到方法中,并且类型为PCWSTR。我的代码创建一个.url文件并将Url保存到该文件中:

        wchar_t array1[] = "[InternetShortcut]\nURL=";
        wchar_t array2[] = pdwFavoriteUrl;
        wchar_t * DataBuffer = new wchar_t[wcslen(array1) + std::strlen(array2) + 1];
        std::strcpy(DataBuffer,array1);
        std::strcat(DataBuffer,array2);

        // Write data to file
        DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer);
        DWORD dwBytesWritten = 0;
        BOOL bErrorFlag = FALSE;

        bErrorFlag = WriteFile(hFile, DataBuffer, dwBytesToWrite, &dwBytesWritten, NULL);

        if (FALSE == bErrorFlag)
        {
            // Log error
            hr = E_FAIL;
        }
        else
        {
            if (dwBytesWritten != dwBytesToWrite)
            {
                // Log error
                hr = E_FAIL;
            }
            else
            {
                // Log success
                hr = S_OK;
                //_tprintf(TEXT("Wrote %d bytes to %s successfully.\n"), dwBytesWritten, argv[1]);
            }
        }

        CloseHandle(hFile);


我知道代码不会按原样编译,因为存在unicode和非unicode字符串方法的版本冲突。感兴趣的行是这一行:

wchar_t array2[] = pdwFavoriteUrl;


pdwFavoriteUrl是PCWSTR类型,无法解决。请帮助将其转换为wchar_t [](首选)或char []。

最佳答案

AFAIK PCWSTR只是wchar_t*的别名,如果以null结尾,则最简单的操作就是使用它来构造std::wstring类型的对象。只需将其传递给构造函数即可:

PCWSTR wcstr = L"My String";
std::wstring wstr(wcstr);


并使用std::wstring对象而不是做诸如以下的恶作剧:

wchar_t * DataBuffer = new wchar_t[wcslen(array1) + std::strlen(array2) + 1];


这可能只会给您带来不愉快的问题和内存泄漏。

10-01 01:57