我有一個COM接口,需要添加一個訪問器方法。返回的值實際上可以是以下四種類型之一:VARIANT_BOOL,long,BSTR或IDispatch派生接口。一種訪問方法迴應VARIANT或幾個返回不同類型?
因此,我有一個選擇:要麼我返回一個VARIANT,要麼我有4種不同的訪問方法返回不同的類型。
interface IValue1 {
HRESULT GetType(TypeEnum*);
HRESULT GetValue(VARIANT*);
};
或
interface IValue2 {
HRESULT GetType(TypeEnum*);
HRESULT GetLongValue(long*);
HRESULT GetBstrValue(BSTR*);
HRESULT GetBoolValue(VARIANT_BOOL*);
HRESULT GetInterfaceValue(ICustomInterface**);
}
我將有IValueX ::反正的GetType - 爲清楚起見。如果我選擇後面的選項,則只有4個訪問器中的一個實際返回值,所有其他訪問器都會由於類型不匹配而顯示錯誤。
我需要這個接口從儘可能廣泛的客戶端消耗 - VB6,Perl,.NET包括在內。
哪種方法更好? - 使用VARIANT還是使用不同的類型?