Ricevo un'eccezione run-time quando provo a trasmettere un oggetto a un'interfaccia che sono abbastanza sicuro che implementa.Riferimenti all'interfaccia downcasting
Ho le seguenti interfacce:
public interface class ISMILTimeContainer;
public interface class ISMILSequence : ISMILTimeContainer;
public interface class ISMILParallel : ISMILTimeContainer;
ho le seguenti classi:
ref class TimeContainer : public ISMILTimeContainer;
ref class Sequence : public TimeContainer, ISMILSequence;
ref class Parallel : public TimeContainer, ISMILParallel;
Poi, ho provare quanto segue:
ISMILTimeContainer^ container = getSequence(); // returns a Sequence^
ISMILSequence^ sequence = static_cast<ISMILSequence^>(container);
Questo genera un'eccezione a run -time:
Piattaforma :: InvalidCastException^nella posizione di memoria 0x04AFD83C. HRESULT: 0x80004002 Nessuna interfaccia supportata
Per quanto posso dire, questo dovrebbe funzionare. C'è qualcosa di sbagliato in ciò che sto cercando di fare, o i sintomi indicano un problema di implementazione (qualcosa è diverso da quanto affermato in precedenza)?
Puoi mostrare 'getSequence'? Ho provato a riprodurre il tuo codice e non ottengo un'eccezione. Per me funziona. Tutto ciò che ho cambiato è stata la riga che chiama 'getSequence' a questo:' ISMILTimeContainer^container = ref new Sequence(); 'Forse' getSequence' non restituisce una 'Sequence'? –
Non esiste una cosa come ereditare una classe in WinRT. È fatto internamente usando la composizione. Penso che in questo caso potresti usare safe_cast, che dovrebbe funzionare "across" e non solo su e giù. Pensalo come un cast pathway, credo. –