我在我们的服务器上安装了以下COM对象,用于rewrite...some遗留代码的对象如下所示:
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 (没有发现入口)和雷加没有任何运气.
COM对象在旧服务器上如下所示:

编辑
在运行regasm命令之后,我应该能够在组件服务中看到COM对象吗?
regasm C:\...\SSDSCommunicator.dll /CodeBase发布于 2011-11-16 09:12:02
好的,sweet...found,谢谢user957902和GTG的回答(如果你想要点的话,在下面写一些答案):
ServicedComponent
。
最后代码如下:
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)
{...
}
}
}发布于 2011-11-16 21:54:06
64位系统上有两个COM域。一个用于32位COM对象,另一个用于64位COM对象。如果您的.Net程序集是ANY_CPU,那么在默认情况下,它将作为64位系统上的64位进程启动。如果您的COM对象被重新定义为32位,那么64位进程将无法看到它。相反,如果COM对象仅作为64位重新处理,则32位进程无法看到它。
https://stackoverflow.com/questions/8136543
复制相似问题