我有一个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还是使用不同的类型?