sqlite — C ++ / CX — мне нужно передать Platform :: String в метод, который принимает const char *?

Я новичок в C ++ (я разработчик C #).

У меня есть класс-оболочка SQLite, который требует, чтобы вы передали имя базы данных как const char* Однако у меня есть только как Platform::String (после поиска файла).

Я не могу найти способ преобразовать Platform::String в const char*,

Я видел еще один вопрос о StackOverflow, который объясняет, почему он не прост, но нет примера кода или сквозного решения.

Может кто-нибудь мне помочь ?

Спасибо

2

Решение

Отказ от ответственности: я мало знаю о C ++ / CX, и я основываю ответ на документации Вот.

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 вместо.

2

Другие решения

Эта ссылка может быть полезна для понимания строк C ++ / CX:

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector