Подписка на несколько событий ActiveX в С# failed
От: Сергей Савин Россия  
Дата: 27.07.05 06:51
Оценка:
День добрый!
Возникла необходимость "импортировать" в проект на C# ActiveX, написанный на Delphi5.
У ActiveX объявлен интерфейс для событий:

  IOPCClientEvents = dispinterface
    ['{747E173D-F2CA-46C6-A681-2F208D34170B}']
    procedure OnData(Count: Integer; AUserData: OleVariant; AValue: OleVariant; 
                     ATimeStamp: OleVariant; AClientID: OleVariant; AQuality: OleVariant); dispid 1;
    procedure OnClientStatusChanged(Status: TClientStatus); dispid 2;
    procedure OnServerStatusChanged(const ServerProgID: WideString; ServerState: TServerStatus); dispid 3;
    procedure OnLog(const Message: WideString; Level: Integer); dispid 4;
  end;

В C# проекте после объявления делегатов делаю следующее:
    OPCClientClass mOPCClient = new OPCClientClass();
    //выполняется нормально
    mOPCClient.OnData += new IOPCClientEvents_OnDataEventHandler(OnData);
    // fatal exception 80040202
    mOPCClient.OnServerStatusChanged += new IOPCClientEvents_OnServerStatusChangedEventHandler(mOPCClient_OnServerStatusChanged);
    mOPCClient.OnLog += new IOPCClientEvents_OnLogEventHandler(OnLog);
    mOPCClient.OnClientStatusChanged += new IOPCClientEvents_OnClientStatusChangedEventHandler(mOPCClient_OnClientStatusChanged);

Подписка на любое первое событие выполняется нормально, при попытке подписаться на любое второе событие вызывает ошибку 80040202 — если не ошибаюсь, CONNECT_E_CANNOTCONNECT (http://support.microsoft.com/kb/183216/EN-US/) в IconnectionPoint::Advise.
Делал так:
    mOPCClient.OnData += new IOPCClientEvents_OnDataEventHandler(OnData);
    mOPCClient.OnData -= new IOPCClientEvents_OnDataEventHandler(OnData);
    mOPCClient.OnServerStatusChanged += new IOPCClientEvents_OnServerStatusChangedEventHandler(mOPCClient_OnServerStatusChanged);
    //exception 80040202 строкой ниже
    mOPCClient.OnLog += new IOPCClientEvents_OnLogEventHandler(OnLog);

Тот же ActiveX при использовании из Delphi работает без проблем — легко подписываюсь на все 4 события.
Пробовал делать ActiveX и Apartment, и Single, и Both, и Free — бесполезно.
Может кто-нибудь подсказать направление рытья?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.