COM-объект на C#. Не работает событие.
От: RegSubscr  
Дата: 31.07.08 16:11
Оценка:
Пытаюсь создать простенький COM-объект на C#. Вот такой код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace COMTest
{
 public delegate void COMTestEvent(String TestStr);

 [Guid("AF1DE52F-5A91-4215-8E73-BAE236EE4475"),
  ComVisible(true),
  InterfaceType(ComInterfaceType.InterfaceIsDual)]
 public interface ICOMTest
 {
  String TestProperty {get;set;}
  void TestMethod();
 };

 [Guid("0526D61B-2732-4036-92CE-E10E62C9D50A"),
  ComVisible(true),
  InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
 public interface ICOMTestEvent
 {
  [DispId(1)]
  void COMTestEventFunc(String TestStr);
 }
 
 [ClassInterface(ClassInterfaceType.None),
  ComSourceInterfaces(typeof(ICOMTestEvent))]
 public partial class UserControl1 : UserControl, ICOMTest
 {
  public event COMTestEvent COMTestEventFunc;

  private String _TestProperty;

  public String TestProperty {get{return _TestProperty;} set{_TestProperty=value;}}

  void ICOMTest.TestMethod()
  {
   MessageBox.Show("TestMethod Called!!!");
   if(COMTestEventFunc!=null) COMTestEventFunc(_TestProperty);
  }

  public UserControl1()
  {
   InitializeComponent();
  }
 }
}


Галка "Register for COM interop" в свойствах проекта выставлена.
Регистрирую вот такой командой:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe COMTest.dll /tlb:COMTest.tlb /codebase

Проверяю из VBA вот так:
Dim WithEvents COMTestObj As COMTest.UserControl1

Sub t1()
 Dim pCOMTest As ICOMTest

 Set pCOMTest = New COMTest.UserControl1

 pCOMTest.TestProperty = "qwerty"

 pCOMTest.TestMethod
 
 Set pCOMTest = Nothing
End Sub

Private Sub COMTestObj_COMTestEvent(ByVal TestStr As String)
 MsgBox TestStr
End Sub


Свойство выставляется, метод вызывается. Событие работать не хочет. Смотрел в отладчике — COMTestEventFunc всегда null.
Что я сделал не так?
com событие c#
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.