2010-01-12 58 views
0

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

回答

1

构建目标是非常简单 - 注册它并管理COM依赖可能非常棘手。

你的.NET项目应该是一个类库,和你的类可以是straightfoward 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 */ } 
    } 
} 

右键单击您的项目,选择属性,应用程序,请单击程序集信息。 ..并确保在Assembly Information对话框的底部选择“Make assembly COM-Visible”。

构建您的项目 - 您应该以\ 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失败”的第一次尝试,并运行它。

现在注册DLL作为使用regasm.exe与.NET Framework安装了一个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注册,由运行64位脚本主机的IIS访问) - 或手动将所有内容强制转换为32位。

+0

问题可能是我的操作系统是x64。我有没有办法让它在全球范围内发挥作用?我的意思是,那里需要那些需要该功能的程序或库? – Alxandr 2010-01-19 21:54:04

+0

你是什么意思“全局” - 你想创建一个纯粹的64位COM对象,或一个x86/x64双目标COM对象,或者只是配置你的64位系统来运行和托管32位COM DLL ? – 2010-01-20 11:39:47

+0

我想创建一个x86/x64双目标COM对象,该对象可以在任何包含依赖关系的机器上工作。 COM对象将被web服务器使用,我不能强迫任何人在x64或x86中使用它,它需要为两者工作。 – Alxandr 2010-01-30 12:16:39

0

构建.NET COM对象可能有点困难。

当你还没有告诉我们,到目前为止,你已经尝试过什么,我能做的最好的是指向你一个很好的一步一步的指导:

Build and Deploy a .NET COM Assembly

+0

我试过按照那个教程,结束了http://alxandr.pastebin.com/f46f0d649上的代码。问题在于它无法工作。我使用OLE/COM对象浏览器,当双击“FdbImg.Image”类时,出现“未实现”的错误。 有关为什么的想法? – Alxandr 2010-01-12 17:38:27