繁体   English   中英

如何从std :: wstring _TCHAR []转换?

[英]How do I convert from std::wstring _TCHAR []?

我正在使用一个库,并从其中一个函数向我发送std::wstring ,另一个库需要发送_TCHAR [] 我怎么转换它?

假设您正在使用Unicode构建,那么std :: wstring.c_str()就是您所需要的。 请注意,c_str()保证它返回的字符串以空值终止。

例如

void func(const wchar_t str[])
{
}

std::wstring src;
func(src.c_str());

如果您使用的是非Unicode构建,则需要通过WideCharToMultiByte将Unicode字符串转换为非Unicode字符串。

正如@Zach Saw所说,如果只为Unicode构建,你可以使用std::wstring.c_str() ,但是最好定义一个tstringstd::basic_string<TCHAR>typedef ),所以你可以安全地使用这种字符串与所有期望TCHAR 1的Windows和库函数完美地使用。

为了获得更多乐趣,您还应该为TCHAR定义所有其他与字符串相关的C ++工具,并创建转换函数std::string / std::wstring <=> tstring

幸运的是,这项工作已经完成; 看到这里这里


  1. 实际上,没有编译的库函数真正可以期望使用TCHAR * ,因为TCHAR在编译时被解析为charwchar_t ,但是您明白了。

使用ATL和MFC字符串转换宏 无论您是在_UNICODE还是ANSI模式下进行编译,这都有效。

即使您不使用MFC,也可以使用这些宏。 仅包括此示例中显示的两个ATL标头:

#include <string>

#include <Windows.h>

#include <AtlBase.h>
#include <AtlConv.h>

int main()
{
    std::wstring myString = L"Hello, World!";

    // Here is an ATL string conversion macro:
    CW2T pszT(myString.c_str());

    // pszT is now an object which can be used anywhere a `const TCHAR*`
    // is required. For example:
    ::MessageBox(NULL, pszT, _T("Test MessageBox"), MB_OK);

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM