private: System::Void btn_entrar_Click(System::Object^ sender, System::EventArgs^ e) {
string btn_texto = txt_login->Text->ToString();
MessageBox(NULL, "Hello!", btn_texto.c_str(), MB_OK | MB_ICONEXCLAMATION);
}
我正在Visual C ++ Studio 2008 Professional中创建一个Windows窗体应用程序,我添加了一个单击功能(通过双击设计模式下的按钮),所以我在它生成的函数内编写了代码。
它产生了2个错误:
错误1:
错误C2440:'初始化':无法从'System :: String ^'转换 到'std :: basic_string< _Elem,_Traits,_Ax>'
错误2:
错误C2872:'MessageBox':模糊符号1>可能 'C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ include \ winuser.h(7374) :int MessageBox(HWND,LPCTSTR,LPCTSTR,UINT)'1>或
“C:\ WINDOWS \ microsoft.net \框架\ V2.0.50727 \ System.Windows.Forms.dll中 :System :: Windows :: Forms :: MessageBox'
我在Windows 7上的Visual Studio 2008 Professional和.NET Framework 3.5下的项目中使用C ++创建
有人知道我该如何解决这个问题?我查了一下但找不到解决办法。 我希望我提供了足够的信息。 提前谢谢。
@edit Cody Gray给出的例子
System::String btn_texto = txt_login->Text->ToString();
System::Windows::Forms::MessageBox(NULL, "Hello!", "HI", MB_OK | MB_ICONEXCLAMATION);
错误发生
错误C3149:'System :: String':这里没有使用此类型 顶级'^'错误C2661: 'System :: Windows :: Forms :: MessageBox :: MessageBox':没有重载 函数需要4个参数
所以我通过在System :: String之后添加^来解决第一个错误 是这样的:
System :: String ^ btn_texto = txt_login-> Text-> ToString();
但第二个错误没有修复,顺便说一句,我如何在MessageBox函数中添加“btn_texto”内容?谢谢!
答案 0 :(得分:1)
System::String^ btn_texto = txt_login->Text->ToString();
MessageBox::Show( "Working", "Info", MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
解决了它。 :)
答案 1 :(得分:0)
您将C ++字符串类型(std::string
)和.NET Framework字符串类型(System::String
)混合在一起,并且这样做不会很好。或者至少它不会很简单。决定你要使用哪一个并坚持下去。
更具体地说,第一个错误是由于这行错误引起的:
string btn_texto = txt_login->Text->ToString();
它错误的第一个原因是因为它创建了一个std::string
类型的对象(可能是你的代码文件顶部有一个using namespace std;
语句),这是C ++字符串类型,而不是.NET Framework字符串类型。 .NET Framework字符串类型是您可能希望在.NET WinForms应用程序中使用的类型。您必须将命名空间完全限定为System::String
。
它错误的第二个原因是因为使用{{1}将String
对象(由Text
属性返回)转换为String
对象是没有意义的} 方法。完全关闭最后一个函数调用。
第二个错误是由Win32标头提供ToString()
函数引起的,.NET Framework也是如此。编译器需要知道你要调用哪一个。
要致电the Win32 MessageBox
function(就像您现在尝试的那样),您需要使用全局范围解析运算符:MessageBox
。
但是你会遇到无法从::MessageBox
转换为C风格字符串的问题。有关如何在C ++ / CLI中提供的各种字符串类型之间进行转换的说明,请参阅this article。
更简单的方法可能是调用the .NET version of the MessageBox
function,您可以通过完全符合条件来完成:System::String
。此版本的优点是您不需要进行任何字符串转换,因为它接受类型为System::Windows::Forms::MessageBox
的参数。 .NET System::String
包装器支持与Win32 MessageBox
函数相同的所有选项,但其中一些选项的顺序不同,因此您需要特别注意文档。