Здесь, на работе, у нас есть старое приложение VB6, которое мне нужно научить новым трюкам. Первое, что мне нужно было сделать - это вызвать методы из. Net COM-видимой DLL, написанной на C#. У меня это работает. Теперь мне нужно, чтобы он обрабатывал входящие события уведомления о прогрессе из той же DLL. Вот код C#:
namespace NewTricksDLL
{
[ComVisible(true)]
[ComSourceInterfaces(typeof(IManagedEventsToCOM))]
public class NewTricks
{
public delegate void NotificationEventHandler(string Message);
public event NotificationEventHandler NotifyEvent = null;
public string SomeMethod(string message)
{
return Notify(message);
}
private string Notify(string message)
{
if (NotifyEvent != null)
NotifyEvent("Notification Event Raised.");
return message;
}
}
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
interface IManagedEventsToCOM
{
[DispId(1)]
void NotifyEvent(string Message);
}
}
А вот как я пытаюсь использовать его в форме VB6
Option Explicit
Public WithEvents newTricks as NewTricksDLL.NewTricks
Private Sub Command1_Click()
Dim response as String
Set newTricks = New NewTricksDLL.NewTricks
AddHandler newTricks.NotifyEvent, AddressOf NotifyEventHandler
response = newTricks.SomeMethod("Please send an event...")
End Sub
Private Sub NotifyEventHandler()
'Nothing
End Sub
Моя проблема в том, что при попытке запустить VB6 Я получаю Compile error: Object does not source automation events.
Если я удаляю WithEvents
Sub Command1_Click
Sub работает, а response
содержит "Please send an event..."
, поэтому я знаю, что метод вызывается через COM.
Где я ошибаюсь с реализацией мероприятия?