我需要创建一个可以通过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组件
回答
构建目标是非常简单 - 注册它并管理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位。
构建.NET COM对象可能有点困难。
当你还没有告诉我们,到目前为止,你已经尝试过什么,我能做的最好的是指向你一个很好的一步一步的指导:
我试过按照那个教程,结束了http://alxandr.pastebin.com/f46f0d649上的代码。问题在于它无法工作。我使用OLE/COM对象浏览器,当双击“FdbImg.Image”类时,出现“未实现”的错误。 有关为什么的想法? – Alxandr 2010-01-12 17:38:27
- 1. 调试.NET COM组件
- 2. .NET使用VB6 COM组件
- 3. 在另一个COM对象内创建一个COM对象
- 4. .Net Com Interop创建实例缓慢
- 5. COM:用VT_BSTR值创建一个VT_ARRAY
- 6. 创建一个COM DLL设置
- 7. 如何创建一个COM DLL(类库)?
- 8. 从COM ProgID加载.NET程序集而不创建COM对象
- 9. Classic.ASP通过COM调用.NET组件
- 10. 如何隔离COM组件.net
- 11. 注册一个C#COM组件?
- 12. 找到一个ActiveX COM组件
- 13. 为Flash创建一个AS3组件库
- 14. 创建一个java Date Picker组件?
- 15. C#创建一个控件数组
- 16. 简单的COM组件
- 17. 如何通过COM方法返回一个.NET对象数组
- 18. 创建一个元组pointofree
- 19. 创建一个数组
- 20. WCF COM +组件
- 21. 创建多个文件组
- 22. WiX - 在同一个安装程序中合并COM和.NET组件的难题
- 23. ActiveX组件不能创建对象COM互操作
- 24. 无法在服务器端创建COM组件实例
- 25. 在C#2005中创建COM组件的问题
- 26. COM RCW - ActiveX组件不能创建对象
- 27. Com。 C#创建类型的COM对象
- 28. 从文本创建COM文件
- 29. 从COM创建头文件TLB
- 30. 在父组件中创建并返回一个新组件
问题可能是我的操作系统是x64。我有没有办法让它在全球范围内发挥作用?我的意思是,那里需要那些需要该功能的程序或库? – Alxandr 2010-01-19 21:54:04
你是什么意思“全局” - 你想创建一个纯粹的64位COM对象,或一个x86/x64双目标COM对象,或者只是配置你的64位系统来运行和托管32位COM DLL ? – 2010-01-20 11:39:47
我想创建一个x86/x64双目标COM对象,该对象可以在任何包含依赖关系的机器上工作。 COM对象将被web服务器使用,我不能强迫任何人在x64或x86中使用它,它需要为两者工作。 – Alxandr 2010-01-30 12:16:39