2012-06-27 1 views
0

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

Я создал класс, который, как мне кажется, должен срабатывать при появлении SMTP-серверов при возникновении события. У меня проблема с регистрацией моего класса, однако, когда я запускаю RegAsm/regfile, я получаю сообщение «Warning, 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 
     } 
    } 
} 

ответ

2

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

public SMTPSink() 
    { } 

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

+0

Это сработало, я действительно не понимаю, почему. Большое спасибо. – AlexLordThorsen