【发布时间】:2011-12-29 12:12:57
【问题描述】:
我在我们的一台服务器上安装了以下 COM 对象,我需要重写...一些遗留代码使用该对象如下:
Set oEmail = CreateObject("SSDSCommunicator.EmailClass")
oEmail.Send(szFrom, szRecipients, szSubject, szEmailBody, SMTPServer, szErr, "", , , , True)
我已按照this 答案中的示例进行操作,但我正在努力注册 COM 组件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mail;
using System.Runtime.InteropServices;
namespace SSDSCommunicator
{
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("DB38A91C-9EB6-4472-9A49-40722431E096")]
public interface IEmailClass
{
void launch();
bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false);
}
[ClassInterface(ClassInterfaceType.None), Guid("A00C16DA-1791-4A3A-8D16-4765A9FAD060"), ProgId("SSDSCommunicator.EmailClass")]
public class EmailClass : IEmailClass
{
private string path = null;
public void launch()
{
Console.WriteLine("I launch scripts for a living.");
}
public bool Send(string szFrom, string szTo, string szSubject, string szMessage, string szSMTPServer, ref object szError, string szAttachments = "", string szReplyTo = "", string szCC = "", string szBCC = "", bool bHTMLBody = false)
{
...
}
}
}
项目构建成功。如何将 dll 注册为 COM 对象,以便旧的 VB6 代码可以工作?
我已经勾选了 COM 互操作的寄存器,并使程序集 COM 在项目设置中可见。
我在 regsvr32(找不到入口点)或 regasm 上没有运气......
COM 对象在旧服务器上如下所示:
编辑
运行 regasm 命令后,我应该能够在组件服务中看到 COM 对象吗?
regasm C:\...\SSDSCommunicator.dll /CodeBase
【问题讨论】:
-
您提到了 regasm,但您是否像这样使用它:“regasm.exe /codebase youlib.dll”? (codebase参数很重要)
-
您是否为您的程序集设置了程序集属性 [程序集:ComVisible(true)]?
-
@StefanEgli 我做到了。然后生成一个 TLB 文件。我不太确定接下来的步骤 - 当我使用此代码
set obj = createObject("SSDSCommunicator.EmailClass")创建一个 vbscript 文件时,我得到一个 ActiveX 组件无法创建对象 800A01AD 错误。我也无法在组件资源管理器中看到对象,就像我上面的屏幕截图一样 -
您使用的是 32 位还是 64 位操作系统?
-
@user957902 64bit windows 7 - 最终安装将在 64bit server 2008 上