我正在使用图书馆,并寄给我 std::wstring 从其功能之一,另一个需要的库 _TCHAR [] 被发送到它。我该如何转换?

有帮助吗?

解决方案

假设您使用的是Unicode build,则您需要的是std :: wstring.c_str()。请注意,C_STR()保证其返回的字符串为null终止。

例如

void func(const wchar_t str[])
{
}

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

如果您使用的是非unicode构建,则需要通过 Widechartomultibyte.

其他提示

作为 @zach看到 说,如果您只为Unicode构建,您可以摆脱 std::wstring.c_str(), ,但易于定义一个 tstring (一个 typedef 为了 std::basic_string<TCHAR>)因此,您可以在所有期望的所有窗口和库功能中安全地使用此类字符串 TCHARs1.

为了获得其他乐趣,您还应定义所有其他与字符串相关的C ++设施 TCHARS,并创建转换功能 std::string/std::wstring <=> tstring.

幸运的是,这项工作已经完成。看 这里这里.


  1. 实际上,没有编译的库功能真的可以期待 TCHAR *, , 自从 TCHARs被解析为 charS或 wchar_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归因
不隶属于 StackOverflow
scroll top