#winforms #c -cli
#winforms #c -cli
Вопрос:
Я создаю проект на C / CLI, в котором я должен отобразить окно сообщения в одной из моих форм.
Содержимое должно представлять собой комбинацию std::string и int.
Но я не могу получить правильный синтаксис.
Я попробовал следующее:
std::string stringPart = "ABC";
int intPart = 10;
MessageBox::Show("Message" stringPart intPart);
Я также пытался:
String^ msg = String::Concat("Message", stringPart);
msg = String::Concat(msg, intPart);
MessageBox::Show(msg);
Может кто-нибудь, пожалуйста, помочь мне с синтаксисом.
Спасибо.
Комментарии:
1. Какую ошибку вы получаете или с какой проблемой вы столкнулись?
Ответ №1:
Ваша проблема в том, что thar std::string
неуправляемый и не может быть назначен управляемому System::String
. Решение заключается в сортировке. Смотрите эту страницу MSDN:http://msdn.microsoft.com/en-us/library/bb384865.aspx
Итак, вот решение (для Visual Studio):
#include <msclr/marshal_cppstd.h>
// ...
std::string stringPart = "ABC";
int intPart = 10;
String^ msg = String::Concat("Message", msclr::interop::marshal_as<System::String^>(stringPart));
msg = String::Concat(msg, intPart);
MessageBox::Show(msg);
Комментарии:
1. Возможно, уже слишком поздно, но в mashalling нет необходимости.
System::String
имеет конструктор, который принимаетconst char*
orconst wchar_t*
, поэтому решение простое:String^ msg = gcnew System::String(stringPart.c_str());