这个问题真的让我很头疼...
我有一个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未定义在类中。现在,我能够在VB6对象浏览器中查看所有API和一个完美的事件--所有东西看起来都在那里...我只是不能让它真正地工作!
我相信我正在错过一些显而易见的事情或者做了一些愚蠢的事情--但是我对整个互操作的业务还很陌生,所以完全逃避了我。
救命啊!