C# ComVisible DLL не регистрируется

Я работаю на кого-то под управлением Windows 2003 Server. Они хотят, чтобы я создал приемник SMTP, который может классифицировать, в какую базу данных и таблицу мы хотим отправлять сообщения. У них нет обмена на этом сервере, только виртуальный SMTP-сервер по умолчанию.

Я создал класс, который, я думаю, должен срабатывать, когда происходит событие onarrival SMTP-серверов. У меня проблема с регистрацией моего класса, однако, когда я запускаю RegAsm /regfile, я получаю "Предупреждение, RA0000: никакая регистрация не произойдет, нет типов для регистрации". если я запустил RegAsm с /TLB, он скажет мне, что типы зарегистрированы, но по классам не отображается в глобальном реестре, и мой класс не вызывается, когда почта отправляется на сервер. Я немного в растерянности относительно того, что я делаю неправильно.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;


namespace SMTPSink
{
    [Guid("????-????-?????-????")]
    [ComVisible(true)]
    [ProgId("SMTPSINK")]
    public class SMTPSink : CDO.ISMTPOnArrival
    {
        SMTPSink()
        { }

        void CDO.ISMTPOnArrival.OnArrival(CDO.Message Message, ref CDO.CdoEventStatus EStatus)
        {
            //Simple test to see if this fires on mail arrival
        }
    }
}

1 ответ

Решение

Вы забыли сделать конструктор публичным. Требуется для экспорта кокласса, у которого нет атрибута библиотеки типов [noncreatable]. Fix:

    public SMTPSink()
    { }

Или просто опустите его, если он не делает ничего полезного.

Другие вопросы по тегам