我需要创建一个可以通过ASP Classic的Server.CreateObject方法访问的类,并公开三个属性(int Width,int Height,bool Loaded)和三个方法(void Load(string) locatoin),void Resize(int width,int height)和void Save(string location))。 到目前为止我所有的尝试都没有成功。
答案 0 :(得分:2)
构建对象非常简单 - 注册它并管理COM依赖可能非常棘手。
你的.NET项目应该是一个类库,你的类可以是一个直接的C#/ .NET CLR对象:
namespace MyCompany.MyProject.Com {
public class MyObject {
public int Width { get; set; }
public int Height { get; set; }
public void Load(string location) { /* implementation here */ }
public void Resize(int width, int height) { /* implementation here */ }
}
}
右键单击项目,选择“属性”,“应用程序”,单击“装配信息...”,并确保在“装配信息”对话框的底部选中“使装配COM可见”。
构建项目 - 您最终应该在\ bin \ debug \文件夹中找到MyCompany.MyProject.Com.dll。
构建一个如下所示的简单ASP网页:
<% option explicit %>
<%
dim myObject
set myObject = Server.CreateObject("MyCompany.MyProject.Com.MyObject")
myObject.Width = 20
myObject.Height = 40
%>
<html>
<head>COM Interop Demo</head>
<body>
<p>Width + Height = <%= myObject.Width + myObject.Height %></p>
</body>
</html>
在http://localhost/上打开该页面,并在第一次尝试运行时验证“Server.CreateObject失败”。
现在使用与.NET框架一起安装的regasm.exe将您的DLL注册为COM对象:
C:\>C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb MyCompany.MyProject.Com.dll /codebase
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.4927
Copyright (C) Microsoft Corporation 1998-2004. All rights reserved.
Types registered successfully
Assembly exported to 'D:\WebDlls\MyCompany.MyProject.Com.tlb', and the type library w
as registered successfully
现在刷新您的网页,您应该在输出中看到宽度+高度= 60 。
这些说明假设您没有以64位运行任何内容;如果你是,它会变得更复杂。 (您需要以64位运行所有 - 编译64位项目并使用64位版本的regasm.exe将其注册为64位COM,由运行IIS的IIS访问64位脚本主机) - 或手动强制所有内容为32位。