wxTextCtrl类的GetValue方法正在崩溃我的应用程序

GetValue method of wxTextCtrl class is crashing my app

本文关键字:崩溃 我的 应用程序 类的 GetValue 方法 wxTextCtrl      更新时间:2023-10-16

我正在尝试使用wxTextCtrl为我的GUI应用程序做一个输入框。我已经制作了这个框,但是当我试图从中取出输入文本时,它崩溃了,我不知道为什么。

代码如下:

main.cpp:

int main(int argc, char** argv)
{   
   wxApp::SetInstance( new App() );
   wxEntryStart(argc, argv);
   wxTheApp->OnInit();
   wxTheApp->OnRun();
   wxTheApp->OnExit();
   wxEntryCleanup();
   return 0;
}

app.cpp:

bool App::OnInit()
{
   wxString title = "Version: ";
   title += APP_VERSION;
   /* Create the frame for my app */
   Frame *simple = new Frame(0, wxID_ANY, title, wxDefaultPosition, wxSize(287, 700)/*wxSize(287, 450)*/, (wxDEFAULT_FRAME_STYLE & ~(wxRESIZE_BORDER | wxMAXIMIZE_BOX)));
   simple->Show(true);
   return true;
}

frame.cpp:

Frame::Frame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) 
              : wxFrame( parent, id, title, pos, size, style )
{
   wxPanel  *panel  = new wxPanel(this, wxID_ANY);
   input_text  = new wxTextCtrl(this, wxID_ANY, "initial", wxPoint(10, 400), wxSize(250, 100));
   wxString str = input_text->GetValue();
   wxMessageBox(str);
}

frame.cpp行中崩溃:wxString str = input_text->GetValue();

我正在使用wxWidgets-3.0.0和Visual Studio 2012在windows上编译。

这可能是一些非常简单的东西,但我刚开始使用wxWidgets,我没有太多的经验。

谢谢。

如果您刚开始使用wxWidgets,为什么不使用标准的方式初始化它,即wxIMPLEMENT_APP宏?我不确定这是否解释了你的问题(如果你在调试器下运行你的程序并确定为什么完全会崩溃,即向我们展示完整的堆栈跟踪,这将是非常有用的),但你肯定没有正确初始化库。

一般情况下,当你想把文本控件创建为面板的子控件时,你也会把它创建为框架的子控件,但这肯定也不会导致崩溃。

在显示窗口之前,从Frames构造函数中调用GetValue()。我认为现在不可能。

对于其他到达这里的人:

我相信这可能是由于使用与应用程序不同的字符串设置(宽/utf -16/16位vs窄/UTF-8/char)编译wxWidgets库(dll/共享对象)造成的。

我很抱歉,我没有时间在我的情况下进一步调查,只是最终在同一棵树中编译库和应用程序,但我相信这是一个方向,因为它解释了否则无法解释与wxString相关的崩溃。