Проблема ССЫЛКИ wxWidgets в Visual Studio - PullRequest
0 голосов
/ 25 января 2012

Я впервые пытаюсь разобраться с wxWidgets, я попытался скомпилировать приведенную ниже программу Hello World:

/*
 * hworld.cpp
 */

#include "wx/wx.h" 

class MyApp: public wxApp
{
    virtual bool OnInit();
};

class MyFrame: public wxFrame
{
public:

    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);

    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);

    DECLARE_EVENT_TABLE()
};

enum
{
    ID_Quit = 1,
    ID_About,
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(ID_Quit, MyFrame::OnQuit)
    EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame( _("Hello World"), wxPoint(50, 50),
                                  wxSize(450,340) );
    frame->Show(true);
    SetTopWindow(frame);
    return true;
} 

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame( NULL, -1, title, pos, size )
{
    wxMenu *menuFile = new wxMenu;

    menuFile->Append( ID_About, _("&About...") );
    menuFile->AppendSeparator();
    menuFile->Append( ID_Quit, _("E&xit") );

    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menuFile, _("&File") );

    SetMenuBar( menuBar );

    CreateStatusBar();
    SetStatusText( _("Welcome to wxWidgets!") );
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
    Close(TRUE);
}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
    wxMessageBox( _("This is a wxWidgets Hello world sample"),
                  _("About Hello World"),
                  wxOK | wxICON_INFORMATION, this);
}

Компилятор показал:

Error   1   error LNK2001: unresolved external symbol _WinMainCRTStartup    C:\Users\550\documents\visual studio 11\Projects\wxWidgitExample\wxWidgitExample\LINK
Error   2   error LNK1120: 1 unresolved externals   C:\Users\550\documents\visual studio 11\Projects\wxWidgitExample\Debug\wxWidgitExample.exe  1

В чем проблема? Я использую MS Visual Studio, наверное, мне нужно использовать директиву #pragma?

Ответы [ 3 ]

1 голос
/ 25 января 2012

Проверьте свои списки свойств под Linker-> System-> SubSystem.Убедитесь, что подсистема Windows, а не консоль.

1 голос
/ 25 января 2012

Попробуйте поместить wxDECLARE_APP(MyApp); в заголовочный файл, где определено MyApp, и wxIMPLEMENT_APP(MyApp); в файл cpp, где он реализован. Описание этих макросов доступно в документации .

0 голосов
/ 25 января 2012

Эта ошибка компоновщика, которую вы получаете, обычно указывает на несоответствие в настройках вашего проекта между настройками ANSI и Unicode. Если вы создаете приложение wxApplication с включенным юникодом, убедитесь, что определены UNICODE и _UNICODE.

Точка входа для приложения Windows Unicode - wWinMainCRTStartup, где в качестве не-Unicode используется WinMainCRTStartup в качестве точки входа. Обычно wxWidgets должен иметь эту настройку правильно для вас, когда вы строили фреймворк.

Чтобы помочь устранить неисправность, связанную с вашей неразрешенной ошибкой, я попытался бы передать этот ключ компоновщику при попытке сборки.

Если вы, например, не используете юникод, используйте /ENTRY:WinMainCRTStartup.

Если вы пример это с использованием юникода, тогда используйте /ENTRY:wWinMainCRTStartup.

...