Синтаксическая ошибка Visual Studio C ++ / CLI при использовании .Net Windows Form - PullRequest
0 голосов
/ 11 марта 2012

У меня есть следующий код, и Visual Studio C ++ сообщает о двух ошибках:

#include "windows.h"

#using <mscorlib.dll>

#using <System.dll>

#using <System.Windows.Forms.dll>

using namespace System::Windows::Forms;

__gc class MyForm : public Form

{

public: 

MyForm()

 { 

     Text = "Hello, Windows Forms!";

     Button* button = new Button();

     button->Text = "Click Me!";

     button->Click += new EventHandler(this, button_click);

     this->Controls->Add(button);

}

void button_click(Object* sender, EventArgs* e)

{

MessageBox::Show("Ouch!");

}

};

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

Application::Run(new MyForm);

}

и об ошибках: ошибка C2061 Синтаксическая ошибка: ошибка Args события C2061 Синтаксическая ошибка: EventHandler

Что следуетЯ делаю, чтобы запустить код?Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 11 марта 2012

Основная проблема в том, что вы не добавили:

using namespace System;

Поскольку EventArgs и EventHandler оба находятся в пространстве имен System , вы должны либо объявить их как

new System::EventHandler()
System::EventArgs* 
...

или включите оператор using выше.

Однако есть и несколько других проблем.

  • Во-первых, нет необходимости включать windows.h, который необходим только при вызове собственных функций Windows Api.

  • Во-вторых, вам не нужно WinMain для управляемых оконных форм c ++, подойдет простая функция main.

  • В-третьих, почему CALLBACK до WinMain ?, обычно предшествует APIENTRY или WINAPI.

0 голосов
/ 15 марта 2012

Добавить строку ', используя систему имен пространства;'

    using namespace System;

Изменить ссылку на button_click следующим образом: & MyForm :: button_click

Полный рабочий код:

    #include "windows.h" 

    #using <mscorlib.dll> 
    #using <System.dll> 
    #using <System.Windows.Forms.dll> 

    using namespace System::Windows::Forms; 
    using namespace System;

    __gc class MyForm : public Form 
    { 

        public: 

        MyForm() 
        {  

             Text = "Hello, Windows Forms!"; 

             Button* button = new Button();  
             button->Text = "Click Me!"; 

             button->Click += new EventHandler(this, &MyForm::button_click); 

             this->Controls->Add(button);  
        } 

        void button_click(Object* sender, EventArgs* e) 
        { 
            MessageBox::Show("Ouch!"); 
        } 

    }; 

    int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)  
    { 
      Application::Run(new MyForm);  
    } 
...