[英]Can I have two classes implement the same interface in COM?
我的課如下
[ComVisible(True)][GUID(...)]
public interface IMyComInterface
{
void DoThis(string[] params);
}
[ClassInterface(ClassInterfaceType.None)]
[GUID(...)]
public class MyComImplementation: MyNetClass,IMyComInterface
{
public void DoThis(string[] params)
{
var netParams=params.ToList();
base.DoThis(netParams);
}
}
這可行。
現在,我想添加第二個繼承MyNetBaseClass但使用過濾器的ComClass:
[ClassInterface(ClassInterface.Type.None)
[GUID(...)]
public class MySecondComImplementation:MyNetClass,IMyComInterface
{
public void DoThis(string[] params)
{
var netParams=params.Where(param=>param.Contains("x"));
base.DoThis(netParams.ToList());
}
}
這行得通嗎,還是我必須使用相同的DoThis
方法定義另一個MyComInterface? 換句話說:每個實現COM-Visible接口的類都必須有自己的唯一的COM-visible接口嗎?
具有多個實現相同接口的對象是完全合法的。 但是,您可以通過其GUID注冊COM dll。 當您要實例化COM對象時,Windows調用DllGetClassObject
入口點函數,並向其傳遞所需的類ID。
因此,此函數的作用類似於COM對象的工廠。 如果編寫此函數的自己的版本,則可以選擇要創建並返回的對象。
我必須承認,我對VB6不太了解,是否可以導出自己的DllGetClassObject
版本來做到這一點。
您顯示的示例完全合法。 這兩個類將各自具有自己的GUID。 通過注冊程序集,必要的條目將被寫入注冊表。
在您的VB應用程序中,您將能夠執行此操作。 (很抱歉,下面的代碼中可能有語法錯誤,我沒有足夠的VB6知識:))。
Dim a As IMyComInterface
Dim b As IMyComInterface
Set a = New MyComImplementation()
Set b = New MySecondComImplementation()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.