2012-03-11 61 views
0

我有下面的代碼和Visual Studio C++報告兩個錯誤:Visual Studio的C++/CLI語法錯誤

#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語法錯誤:事件參數 錯誤C2061語法錯誤:EventHandler

我應該怎麼做才能讓代碼運行? Thanx提前。

+0

改變了你的標籤,沒有標籤問題的託管C++爲 「C++」 - 這是完全不同的語言。我看到的是你忘記了'使用命名空間系統'。但是您應該真的考慮使用C++/CLI(或C#),而不推薦使用Managed C++。 – 2012-03-11 08:02:41

+0

你不需要Windows窗體的'WinMain'。你也可以使用'main'。 – ApprenticeHacker 2012-03-11 08:06:05

+0

我發現問題,請檢查編輯。 – ApprenticeHacker 2012-03-11 08:16:00

回答

0

添加行'using namespace System;'

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

的主要問題似乎是,你沒加:

using namespace System; 

由於EventArgsEventHandler都在系統命名空間,您必須聲明爲,

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

或包括上面的using聲明。

但是,還有一些其他問題。

  • 首先,沒有必要包含windows.h,只有當您調用本地Windows Api函數時才需要。其次,你不需要一個WinMain用於managed-C++窗體,一個簡單的main函數就可以做到這一點。

  • 第三,爲什麼CALLBACKWinMain前?,它通常前面加一個APIENTRYWINAPI

+0

'CALLBACK','APIENTRY'和'WINAPI'宏定義爲相同的東西,所以這實際上並不影響程序的運行。但是,從語義上講,使用別的東西會更清楚。 – 2012-03-11 08:17:57