2015-06-24 43 views
0

嗨,我有一個名爲CLSFW_SBSession與事件VB6的接口:擴展與事件VB6接口在C#

Public Event DataTransfer(ByVal Data As Variant) 

Public Property Get ActionID() As Long 
End Property 

... 

我需要將它與一個C#互操作類擴展。我試過:

[ComVisible(true)] 
[Guid("ddb976bd-fe29-44d5-a163-e7780a4bb897")] 
public class ClsSbSession : FWBO_LibSrv.CLSFW_SBSession 
    public event __CLSFW_SBSession_DataTransferEventHandler DataTransfer; 
    ... 

現在,如果我在VB6聲明此類型的對象,我實例它,不與事件,它的工作原理:

Private session As FWBO_LibSrv.CLSFW_SBSession 
Set session = new ClsSbSession() 

但是如果我使用:

Private WithEvents session As FWBO_LibSrv.CLSFW_SBSession 

我嘗試實例吧:

Set session = new ClsSbSession() 

我收到一個錯誤:

對象或類不支持的事件集

我如何可以管理從我的C#類的VB6事件做的?謝謝

回答

1

i have a vb6 interface

這是非常模糊的,VB6不允許聲明一個接口。它確實從VB6類聲明中生成它們,它們的名字以下劃線開頭。應該有兩個,一個爲班級,可能命名爲_CLSFW_SBSession,另一個是該活動。找到這些接口名稱的一種方法是從Visual Studio命令提示符運行Oleview.exe。使用File +查看Typelib並選擇VB6可執行文件。找到coclass聲明並記下由[default]和[source]屬性標記的接口。

你需要從[默認]接口派生類。你必須使用[ComSourceInterfaces]屬性來命名[source]接口。 MSDN指南頁面is here。這並不清楚你爲什麼要模仿VB6類,這隻有在你需要現有VB6類的替代品並需要保持舊版客戶端程序運行時纔是必需的。這有額外的要求,如匹配guid。