首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装.NET COM+ dll

安装.NET COM+ dll
EN

Stack Overflow用户
提问于 2011-11-15 12:46:08
回答 2查看 4.8K关注 0票数 5

我在我们的服务器上安装了以下COM对象,用于rewrite...some遗留代码的对象如下所示:

代码语言:javascript
复制
Set oEmail = CreateObject("SSDSCommunicator.EmailClass")
oEmail.Send(szFrom, szRecipients, szSubject, szEmailBody, SMTPServer, szErr, "", , , , True)

我遵循了this答案中的示例,但我很难注册COM组件。

代码语言:javascript
复制
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对象吗?

代码语言:javascript
复制
regasm C:\...\SSDSCommunicator.dll /CodeBase
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-16 09:12:02

好的,sweet...found,谢谢user957902和GTG的回答(如果你想要点的话,在下面写一些答案):

ServicedComponent

  • Manually
  • 构建了针对x86
  • 的解决方案,该解决方案使用
  • 继承的.snk文件签名程序集,在组件服务中添加SSDSCommunicator组件,然后将dll添加为组件

最后代码如下:

代码语言:javascript
复制
 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)
 {...
}

        }
    }
票数 1
EN

Stack Overflow用户

发布于 2011-11-16 21:54:06

64位系统上有两个COM域。一个用于32位COM对象,另一个用于64位COM对象。如果您的.Net程序集是ANY_CPU,那么在默认情况下,它将作为64位系统上的64位进程启动。如果您的COM对象被重新定义为32位,那么64位进程将无法看到它。相反,如果COM对象仅作为64位重新处理,则32位进程无法看到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8136543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档