gpt4 book ai didi

C# 到 VB6 COM 事件 ("object or class does not support the set of events")

转载 作者:太空狗 更新时间:2023-10-29 22:25:07 25 4
gpt4 key购买 nike

真的用这个把我的头发拉出来......

我有一个 C# 项目,其接口(interface)定义为:

/* 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”工作。它失败并显示“对象或类不支持事件集”消息。

我最初将这两个接口(interface)混为一谈,但后来 C# 提示说 DataEvent 没有在类中定义。目前的情况是,我能够在 VB6 对象浏览器中完美地查看所有 API 和一个事件——一切看起来都在那里……我只是无法让它真正起作用!

我确信我遗漏了一些明显的东西或做了一些愚蠢的事情——但我是整个互操作业务的新手,所以它只是完全逃避了我。

帮助!

最佳答案

看这篇文章here .

具体来说,您似乎缺少如下所示的声明。

[Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(DBCOM_Events))]
public class DBCOM_Class : DBCOM_Interface
{

你有这个部分

// // Events interface Database_COMObjectEvents 
[Guid("47C976E0-C208-4740-AC42-41212D3C34F0"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface DBCOM_Events
{
}

但是如果没有第二个,COM 对象的 vtable 和类型库就没有与 VB6(或其他 COM 使用者)一起工作所需的事件映射。

您可以使用 Google 搜索词“com event”c# 并获得许多其他好的结果。

关于C# 到 VB6 COM 事件 ("object or class does not support the set of events"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com