Пытаюсь создать простенький 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.
Что я сделал не так?