Следующий код работает:
void CMyPlugin8::myMessageBox(std::string& myString)
{
myString = "Received the following string\n" + myString;
char * writable = new char[myString.size() + 1];
std::copy(myString.begin(), myString.end(), writable);
writable[myString.size()] = '\0'; // don't forget the terminating 0 "delete[] writable;"
int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
delete[] writable;
}
Для автоматической очистки я использовал информацию из: Как преобразовать std :: string в const char * или char *?.
Следующий код выдает ошибку:
void CMyPlugin8::myMessageBox(std::string& myString)
{
myString = "Received the following string\n" + myString;
std::vector<char> writable(myString.begin(), myString.end());
writable.push_back('\0');
int msgboxID = MessageBox(
NULL,
writable,
"Notice",
MB_OK
);
}
Я получаю эту ошибку:
MessageBoxA: невозможно преобразовать параметр 2 из std :: vector<_Ty> ‘в’ LPCSTR ‘
MessageBox
занимает const char*
, Вам не нужно сначала копировать строку для этого. Просто использовать c_str
:
void CMyPlugin8::myMessageBox(std::string& myString)
{
myString = "Received the following string\n" + myString;
int msgboxID = MessageBox(
NULL,
myString.c_str(),
"Notice",
MB_OK
);
}
Обратите внимание, что я думаю, что ваш API плох: вы изменяете значение передаваемой строки. Обычно вызывающая сторона не ожидала этого. Я думаю, что ваша функция должна выглядеть следующим образом:
void CMyPlugin8::myMessageBox(const std::string& myString)
{
std::string message = "Received the following string\n" + myString;
int msgboxID = MessageBox(
NULL,
message.c_str(),
"Notice",
MB_OK
);
}
Вы не можете передать вектор как LPCSTR, вы должны. Использование:
&writable[0]
или же:
writable.data()
вместо. Или просто использовать myString.c_str()
void CMyPlugin8::myMessageBox(const std::string& myString)
{
std::string message = "Received the following string\n" + myString;
int msgboxID = MessageBox(
NULL,
message.c_str(),
"Notice",
MB_OK
);
}
Спасибо всем & @Falcon