创建.NET COM组件

时间:2010-01-12 16:33:11

标签: .net com asp-classic

我需要创建一个可以通过ASP Classic的Server.CreateObject方法访问的类,并公开三个属性(int Width,int Height,bool Loaded)和三个方法(void Load(string) locatoin),void Resize(int width,int height)和void Save(string location))。 到目前为止我所有的尝试都没有成功。

1 个答案:

答案 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位。