我在我们的一台服务器上安装了以下 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
最佳答案
好的,亲爱的...感谢 user957902 和 GTG 找到了这个问题的答案(如果你想要积分,请在下面写一些答案):
- 构建了针对 x86 的解决方案
- 使用 .snk 文件对程序集进行签名
- 继承ServicedComponent
- 在组件服务中手动添加SSDSCommunicator组件,然后将dll作为组件添加
最终代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mail;
using System.Runtime.InteropServices;
using System.EnterpriseServices;
namespace SSDSCommunicator
{
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("DB38A91C-9EB6-4472-9A49-40722431E096")]
public interface IEmailClass
{
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 : ServicedComponent, IEmailClass
{
private string path = null;
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)
{...
}
}
}
关于c# - 安装 .NET COM+ dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136543/