簡體   English   中英

我可以讓兩個類在COM中實現相同的接口嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM