Ich habe eine COM-Schnittstelle und muss eine Accessor-Methode hinzufügen. Der zurückgegebene Wert kann tatsächlich einen von vier Typen aufweisen: VARIANT_BOOL, long, BSTR oder eine von IDispatch abgeleitete Schnittstelle.Eine Accessor-Methode, die einen VARIANT oder mehrere wiederkehrende Typen zurückgibt?
Ich habe daher eine Wahl: Entweder ich eine VARIANT zurückgeben oder ich habe 4 verschiedene Zugriffsmethoden, die unterschiedliche Typen zurückgeben.
interface IValue1 {
HRESULT GetType(TypeEnum*);
HRESULT GetValue(VARIANT*);
};
oder
interface IValue2 {
HRESULT GetType(TypeEnum*);
HRESULT GetLongValue(long*);
HRESULT GetBstrValue(BSTR*);
HRESULT GetBoolValue(VARIANT_BOOL*);
HRESULT GetInterfaceValue(ICustomInterface**);
}
Ich werde die IValueX :: GetType sowieso haben - für Klarheit. Wenn ich die letztere Option wähle, gibt nur einer von 4 Accessoren tatsächlich einen Wert zurück, alle anderen zeigen einen Fehler an, weil der Typ nicht übereinstimmt.
Ich brauche diese Schnittstelle, die von so vielen Kunden wie möglich konsumierbar ist - VB6, Perl, .NET enthalten.
Welche Alternative ist besser - mit VARIANT oder mit verschiedenen Typen?