C ++ / CX - 我需要将一个Platform :: String传递给一个带有const char *的方法?

时间:2012-11-23 09:49:45

标签: c++ sqlite windows-8 windows-runtime c++-cx

我是c ++的新手(我是c#开发人员)。

我有一个SQLite包装类,要求您将数据库名称作为const char*传入,但我只将其作为Platform::String(在执行文件搜索后)。

我似乎无法找到将Platform::String转换为const char*的方法。

我在StackOverflow上看到了另一个问题,它解释了为什么它不直接,但没有示例代码或端到端解决方案。

任何人都可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:2)

免责声明:我对C ++ / CX知之甚少,而且我的答案基于文档here

String类包含16位Unicode字符,因此您无法直接获取指向8位char类型字符的指针;你需要转换内容。

如果已知该字符串仅包含ASCII字符,则可以直接转换它:

String s = whatever();
std::string narrow(s.Begin(), s.End());
function_requiring_cstring(narrow.c_str());

否则,字符串将需要翻译,这会变得非常毛茸茸。以下可能是正确的做法,将宽字符转换为窄字符的多字节序列:

String s = whatever();
std::wstring wide(s.Begin(), s.End());
std::vector<char> buffer(s.Length()+1);  // We'll need at least that much
for (;;) {
    size_t length = std::wcstombs(buffer.data(), wide.c_str(), buffer.size());
    if (length == buffer.size()) {
        buffer.resize(buffer.size()*2);
    } else {
        buffer.resize(length+1);
        break;
    }
}
function_requiring_cstring(buffer.data());

或者,您可能会发现更容易忽略Microsoft关于如何处理字符串的想法,而是使用std::string

答案 1 :(得分:0)

此链接可能有助于理解C ++ / CX字符串:

http://msdn.microsoft.com/en-us/library/windows/apps/hh699879(v=vs.110).aspx