2011-04-24 132 views
2

我正在C++/CLI中构建一个项目,其中我必须在其中一个窗体中显示一个消息框。内容必须是std :: string和int的组合。MessageBox中需要C++/CLI帮助::显示

但我无法得到正确的语法。

我试过如下:

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); 

是否有人可以帮助我的语法。

谢谢。

+0

你什么错误,或者是你有什么问题? – 2011-04-24 17:23:24

+0

http://social.msdn.microsoft.com/Forums/en-US/d70a77b7-1508-4884-a5bc-106cf068b1be/how-can-i-show-messagebox-in-visual-c?forum=vcgeneral – 2014-02-07 13:26:22

回答

8

您的问题是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); 
+2

也许它已经太晚了,但没有必要进行修剪。 'System :: String'有一个构造函数,它接受'const char *'或'const wchar_t *',所以解决方案很简单:'String^msg = gcnew System :: String(stringPart.c_str());'' – Quest 2016-08-29 14:44:10