C# · 12月 23, 2021

c# – 使用互操作提升vb6事件

我有一个遗留的VB6组件,我使用tlbimp.exe导入到VS中以生成我的互操作程序集. VB6组件定义了一个允许我在VB6中传递消息的事件. Public Event Message(ByVal iMsg As Variant,oCancel As Variant)

我真的希望能够在我的C#程序中提高它,但它作为事件导入,而不是委托或其他有用的东西.所以,我只能听,但从不开火.有谁知道如何触发VB6中包含的事件? C#事件看起来像

[TypeLibType(16)][ComVisible(false)] public interface __MyObj_Event { event __MyObj_MessageEventHandler Message; }

遗憾的是我无法更改VB6代码.谢谢.

解决方法 在VB6中,事件只能从类(或表格,视情况而定)声明事件中引发.要强制在VB6中引发事件,您需要在类上公开一个方法来执行此操作.如果你没有源代码,那你就不走运了.

从文档中

RaiseEvent eventname [(argumentlist)]

The required eventname is the name of
an event declared within the module
and follows Basic variable naming
conventions.

例如

Option ExplicitPrivate FText As StringPublic Event OnChange(ByVal Text As String)’This exposes the raising the eventPrivate Sub Change(ByVal Text As String) RaiseEvent OnChange(Text)End SubPublic Property Get Text() As String Text = FTextEnd PropertyPublic Property Let Text(ByVal Value As String) FText = Value Call Change(Value)End Property

很抱歉成为坏消息的承担者.