在Visual Studio .NET 2002刚出来时,我就曾经听过同事说过他用C++写过ASP.NET,不过由于当时才刚刚学C#,还不会C++,所以也没问他是怎么写的,一直到最近开始学C++,发现在Visual Studio 2005可以用C++/CLI开发Windows Form,但却无法开发ASP.NET,实在令人遗憾,在网络上也只在Code Project谈到在Visual Studio .NET 2002下用Managed C++写ASP.NET(ASP.NET with Managed C++),但Managed C++和C++/CLI的语法不太一样,原本的范例无法compile成功,经过一段研究之后,终于找到了用C++/CLI撰写ASP.NET的方式。在这篇文章中,我将一步步的demo如何用C++/CLI开发ASP.NET程序。

 

首先,建立一个新的Web Site,由于Visual Studio 2005在ASP.NET没支持C++,所以建立Web Site时,先随便选一个语言建立。



建立一个Web Form名为HelloWorld.aspx,请不要选择Place code in separate file,这样Visual Studio 2005会将Event Handler放在aspx文件中,可以让aspx.cpp省掉event宣告的程序。



使用Web Form Designer做出以下的介面。



在Page Directive部分,将Language=”C#”删除,加上AutoEventWireup="true" Inherits="HelloWorld",HelloWord为C++的Class名称。也要将<script runat="server"></script>部分删除。

 1<%@ Page AutoEventWireup="true" Inherits="HelloWorld" %>
 2
 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4<html xmlns="http://www.w3.org/1999/xhtml">
 5<head runat="server">
 6  <title>Untitled Page</title>
 7</head>
 8<body>
 9  <form id="form1" runat="server">
10    <div>
11      Using C++/CLI in ASP.NET<br />
12      <br />
13      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
14      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
15  </form>
16</body>
17</html>
18

建立C++ Project,左侧选择CLR,此为.NET platform的Project,右侧选择CLR Empty Project即可,切记不要选择Class Library,这样会多出很多我们不需要的档案,而且最后我们也不会用Visual Studio 2005来compile,会使用Command Prompt的方式compile。



建立HelloWorld.aspx.cpp。




加入C++/CLI程序。C++/CLI对ANSI C++做了些扩充,为了和C++内建的型别与Class做区别,Managed的Class需加上ref modifier,而Managed的Object要加上^。最重要的,IDE支援Intellisense方式写ASP.NET。

 1#using <system.dll>
 2#using <mscorlib.dll>
 3#using <system.web.dll>
 4
 5using namespace System;
 6using namespace System::Web::UI::WebControls;
 7
 8public ref class HelloWorld : public System::Web::UI::Page {
 9protected:
10  Button^ Button1;
11  Label^  Label1;
12
13public:
14  void Button1_Click(Object^ sender, EventArgs^ e) {
15    this->Label1->Text = "Hello World";
16    return;
17  }

18}
;

使用Visual Studio 2005 Command Prompt編譯C++/CLI。

 

使用以下的語法編譯C++/CLI。

1cl /clr HelloWorld.aspx.cpp /link /dll /out:HelloWorld.dll


最后只要将HelloWorld.aspx放到c:\Inetpub\wwwroot\下,HelloWorld.dll放到c:\Inetpub\wwwroot\bin\下,就完成deployment。


结论

很多人说C++无法开发ASP.NET,ANSI C++的确不能,但C++/CLI则可以,事实上,任何.NET下的语言都可以开发ASP.NET,虽然Visual Studio 2005工具不见的支持,但只要透过一些小技巧,你依然可以用妳喜欢的.NET语言开发ASP.NET。


Reference
ASP.NET with Managed C++ , Soliant, The  code project.