从 LPTSTR 转换为 tstring 会导致运行时错误



我正在尝试将LPTSTR变量转换为tstring(即Unicode应用程序中的wstring和ANSI中的字符串)。

如何执行此转换?

我的代码尝试执行转换,但它导致错误:"调试断言失败!表达式:无效的空指针":

#ifdef UNICODE  
#define tstring std::wstring  
#else  
#define tstring std::string  
#endif 
tstring TVManager::getDevicePropertyTEST(HDEVINFO hDevInfo, SP_DEVINFO_DATA deviceInfoData, DWORD flag)
{
    DWORD dataT      = 0;
    DWORD buffersize = 0;
    LPTSTR buffer    = NULL;
    while (!SetupDiGetDeviceRegistryProperty(hDevInfo,  &deviceInfoData, flag, &dataT,
                                             (PBYTE)buffer, buffersize, &buffersize))
    {
        if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
            // Change the buffer size.
            if (buffer) 
                LocalFree(buffer);
            buffer = (LPTSTR)LocalAlloc(LPTR, buffersize);
        }
        else {
            // Insert error handling here.
            debug_print_ex("Else happened:", buffer);
            break;
        }
    }
    tstring propertyValue = tstring(buffer); // ERROR OCCURS HERE
    if (buffer) 
        LocalFree(buffer);
    return propertyValue;
}

你正在传递一个空指针到 std::basic_string<> 的构造函数 - 不好。假设如果 buffer 为 null,您只需要一个空字符串,请执行以下操作:

tstring propertyValue;
if (buffer)
    propertyValue = buffer;

相关内容

最新更新