在.NET框架中,虽然支持多种语言编译器,但ASP.NET默认只解析C#、VB.NET和JScript三种语言。要使用ASP.NET不支持的语言,如托管C++,需要绕过ASP.NET的解析器。实现这一目的的方法称为“代码后置”(code-behind)。此方法适用于任何支持.NET编译器的语言(例如COBOL)。本文将通过一个著名的“Hello World”示例,展示如何在ASP.NET页面中使用托管C++作为代码后置。
首先,创建一个简单的ASP.NET文件,命名为HelloWorldMC.aspx。此文件中最关键的部分是Inherits属性,它告诉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="点击" OnClick="SayHello" Width="172px"></asp:Button>
</form>
</body>
</html>
接下来,创建托管C++文件,作为代码后置文件,命名为HelloWorldMC.aspx.cpp。这里遵循了Visual Studio.NET的命名约定。重要的是,要保持.aspx文件和.cpp文件中服务器控件的名称一致。例如,.aspx文件中的id="Button1"与代码后置文件中的Button* Button1相对应,这将它们绑定到<asp:Button id="Button1" runat=server></asp:Button>控件。同时,请记住,函数SayHello必须是public的,以便.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