На самом деле тяну меня за волосы с этим ...
У меня есть проект C # с интерфейсом, определенным как:
/* Externally Accessible API */
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ISerial
{
[DispId(1)]
bool Startup();
[DispId(2)]
bool Shutdown();
[DispId(3)]
bool UserInput_FloorButton(int floor_number);
[DispId(4)]
bool Initialize();
}
/* Externally Accesssible Event API */
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ISerialEvent
{
[DispId(5)]
void DataEvent();
}
[ComSourceInterfaces(typeof(ISerialEvent), typeof(ISerial))]
[ClassInterface(ClassInterfaceType.None)]
public class SerialIface : ISerial
{
public delegate void DataEvent();
public event DataEvent dEvent;
public bool Initialize()
{
//testing the event callback
if (dEvent != null)
{
dEvent();
}
}
...
}
И код VB6 выглядит так:
Private WithEvents objSerial As SerialIface
Private Sub objSerial_DataEvent()
'do something happy'
End Sub
Public Sub Class_Initialize()
Set objSerial = New SerialIface '<---this is the line that fails'
Call objSerial.Initialize '<--Initialize would trigger DataEvent, if it got this far'
End Sub
Что ж, нормальные функции типа API работают (если я объявляю objSerial без ключевого слова WithEvents), но я не могу заставить "DataEvent" работать. Сбой с сообщением «объект или класс не поддерживает набор событий».
Первоначально я объединил два интерфейса вместе, но затем C # пожаловался, что DataEvent не определен в классе. В настоящий момент я могу прекрасно просматривать все API и одно событие в объектном браузере VB6 - все выглядит так, будто оно есть ... Я просто не могу заставить его работать на самом деле!
Я уверен, что упускаю что-то очевидное или делаю что-то глупое - но я новичок во всем бизнесе взаимодействия, так что это просто ускользает от меня.
Помощь!