使用托管C++的ASP.NET





5.00/5 (3投票s)
使用托管C++作为ASP.NET网页的代码隐藏文件
引言
我最近在留言板与Chris Maunder讨论了这个主题。Chris得出结论,ASP.NET不支持托管C++,我同意。但是它支持MSIL编译的程序集。
尽管.NET Framework支持许多语言编译器,但ASP.NET开箱即用仅支持解析三种语言:C#、VB.NET和JScript。因此,我们必须绕过ASP.NET解析器才能使用ASP.NET不支持的语言。我们将用来实现此目的的方法称为“代码隐藏”。此方法应该适用于任何支持.NET编译器的语言(例如COBOL)。我将用著名的“Hello World”示例来演示此技术。本文的唯一目标是向您展示如何使用托管C++作为ASP.NET页面的代码隐藏,它不会演示任何复杂的C++编码。
使用托管C++作为ASP.NET代码隐藏
首先,让我们创建一个名为HelloWorldMC.aspx的简单ASP.NET文件。此文件中最重要的部分是Inherits="HelloWorldMC"
,这将告诉ASP.NET查找程序集(代码隐藏)文件。
<%@ Page AutoEventWireup="false" Inherits="HelloWorldMC" %>
<html>
<head>
<title>HelloWorld MC++</title>
</head>
<body>
<form runat=server ID="Form1">
<asp:Button id="Button1" runat="server" Text="Click Me Please"
OnClick="SayHello" Width="172px"></asp:Button>
</form>
</body>
</html>
接下来,我们创建托管C++文件作为名为HelloWorldMC.aspx.cpp的代码隐藏文件,我在这里遵循Visual Studio.NET的命名约定。务必使服务器控件的名称在.aspx文件和.cpp(代码隐藏)文件中保持一致。例如,id="Button1"
用于.aspx文件,而Button* Button1
用于代码隐藏文件,这会将其绑定到<asp:Button id="Button1" runat=server></asp:Button>
控件。还要记住,函数SayHello
必须是公共的,以便.aspx页面可以访问它。
#using <system.dll>
#using <mscorlib.dll>
#using <system.web.dll>
using namespace System;
using namespace System::Web::UI::WebControls;
public __gc class HelloWorldMC : public System::Web::UI::Page
{
protected:
Button* Button1;
public:
void SayHello (Object* sender, EventArgs* e)
{
Button1->Text = "Hello MC++ World";
return;
}
};
编译项目
确保HelloWorldMC.aspx和HelloWorldMC.aspx.cpp文件位于IIS Web服务器的根目录(即C:\Inetpub\wwwroot)中。现在,如果根目录中不存在子目录bin,请创建它(即C:\Inetpub\wwwroot\bin)。以下命令行语法将编译并创建我们的代码隐藏文件,并将其放置在bin中。确保这是从Web服务器根目录运行的。
cl /clr HelloWorldMC.aspx.cpp /link /dll /out:bin\HelloWorldMC.dll
启动浏览器并浏览文件https:///HelloWorldMC.aspx,ASP.NET 不关心代码隐藏(程序集)是如何创建的,只要它符合.aspx文件中的Inherits="HelloWorldMC"
,这告诉ASP.NET存在一个名为HelloWorldMC.dll的程序集。请注意,在所有ASP.NET编程中使用代码隐藏技术有很多优点,列举几个:
- 执行前编译
- 将表示代码与业务逻辑分离
在VS.NET中获得.CPP代码隐藏文件的IntelliSense
我建议获取.cpp文件的IntelliSense的方法是,向当前存在的Web项目添加一个空白的托管C++项目。我尝试首先创建.cpp代码隐藏文件,然后将现有项目添加到我的Web项目中,并且.cpp文件已添加到我的Web项目中,但是IntelliSense无法正常工作。