MessageBox :: Show中需要C++/CLI帮助

Jak*_*ake 2 c++-cli winforms

我正在用C++/CLI构建一个项目,我必须在其中一个表单中显示一个消息框.

内容必须是std :: string和int的组合.

但我无法获得正确的语法.

我尝试了以下方法:

std::string stringPart = "ABC";
int intPart = 10;
MessageBox::Show("Message" + stringPart + intPart);
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

String^ msg = String::Concat("Message", stringPart);
msg = String::Concat(msg, intPart);
MessageBox::Show(msg);
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解释一下语法.

谢谢.

Arc*_*hie 9

您的问题是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);
Run Code Online (Sandbox Code Playgroud)

  • 也许现在为时已晚,但没有必要进行编组.`System :: String`有一个构造函数,它接受`const char*`或`const wchar_t*`所以解决方案很简单:`String ^ msg = gcnew System :: String(stringPart.c_str());` (3认同)