Мне известен вопрос 10-летней давности с тем же названием, что и этот, но я дважды проверил и не ошибочно использую имя делегата. Это другой вопрос.
Здесь, на работе, у нас есть старое приложение VB6, которое мне нужно научить новым трюкам. Первое, что мне нужно было сделать, это вызвать методы из .Net COM-видимой DLL, написанной на C #. У меня это работает. Теперь мне нужно, чтобы он обрабатывал входящие события уведомления о ходе выполнения из той же библиотеки DLL. Вчера я задал аналогичный вопрос, в котором IDE VB6 даже не видела, что у DLL есть события, которые можно предложить. Эта проблема была решена путем правильного оформления интерфейсов и классов C #.
Во-первых, код C #:
namespace NewTricksDLL
{
[ComVisible(true)]
[Guid("16fb3de9-3ffd-4efa-ab9b-0f4117259c75")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ITransfer
{
[DispId(2)]
string SendAnEvent();
}
[ComVisible(true)]
[Guid("16fb3de9-3ffd-4efa-ab9b-0f4117259c74")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IManagedEventsToCOM
{
[DispId(2)]
void NotificationEvent();
}
[ComVisible(true)]
[Guid("dcf177ab-24a7-4145-b7cf-fa06e892ef21")]
[ComSourceInterfaces(typeof(IManagedEventsToCOM))]
[ProgId("ADUTransferCS.NewTricks")]
public class NewTricks : ITransfer
{
public delegate void NotificationEventHandler();
public event NotificationEventHandler NotifificationEvent;
public string SendAnEvent()
{
if (NotifificationEvent != null)
NotifificationEvent();
}
}
}
Теперь моя попытка использовать его в VB6. Обратите внимание, что обработчик событий _tricky_NotificationEvent был сгенерирован IDE путем выбора _tricky в раскрывающемся меню слева и NotificationEvent в раскрывающемся списке справа, поэтому я знаю, что это событие видно в среде VB6 IDE.
Option Explicit
Public WithEvents _tricky As NewTricksDLL.NewTricks
Private Sub Command1_Click()
' The next line fails with 'Object or class does not support the set of events'
Set _tricky = CreateObject("NewTricksDLL.NewTricks")
' Execution never makes to the next line
_tricky.SendAnEvent()
End Sub
Private Sub _tricky_NotificationEvent()
' This handler was auto generated by the IDE
End Sub
[ClassInterface(ClassInterfaceType.None)]
, но я не уверен, имеет ли это значение. - person GSerg   schedule 13.01.2020