免責事項: 私は C++/CX についてほとんど知りません。回答はこちらのドキュメントに基づいています。
このクラスには 16 ビットの Unicode 文字が含まれているため、8 ビット型の文字String
へのポインターを直接取得することはできません。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
代わりに使用する方が簡単な場合があります。