c# - 安装 .NET COM+ dll

标签 c# asp.net dll com

我在我们的一台服务器上安装了以下 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 对象在旧服务器上看起来像这样:

enter image description here

编辑

运行 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/

相关文章:

c# - 使用 XMl 阅读器读取配置文件

c# - C# 对象的前缀和命名空间

c# - 使用 EF Code First,如何自动填充 HashedPassword 列?

c# - 使用 C# 下载 3000 多张图片?

asp.net - 庞大的 ASP.NET Web 表单

c++ - 我可以将 dll 加载到共享内存中吗?

c# - 刚刚将 RavenDB 更新为 rev。 2230 从转。 960 和调用 session.SaveChanges() 我有 JsonSerialization 异常

c# - 在 Azure Blob 存储中使用 Etag 进行乐观锁定不起作用

c++ - 从 VB6 访问 C++ DLL 中的位图资源

C++ Loadlibrary() 错误 3765269347