2010-10-14 15 views
5

Devo fare alcune cose strane con gcroot, ma ottengo il seguente errore sulla linea di cast dinamica: "non posso usare" dynamic_cast "per convertire da" gcroot "a" IMyInterface^". In C#, potresti facilmente lanciare un oggetto generico a qualsiasi interfaccia. si può ottenere un errore di runtime se l'oggetto non implementa l'interfaccia ma sarebbe compilare.Come posso trasmettere un gcroot <Object^> a IMyInterface in C++. Net?

gcroot<Object^> m_pDataObject; 
IMyInterface obj = dynamic_cast<IMyInterface^>(m_pDataObject); 

risposta

9

Questo funziona (compila) e dovrebbe fare quello che vuoi (modulo sostituzione IDisposable con l'interfaccia richiesto):

gcroot<Object^> m_pDataObject; 
Object^ obj = m_pDataObject;  // implicit conversion from gcroot<> 
IDisposable^ intf = dynamic_cast<IDisposable^>(obj); // or safe_cast<> 
+0

Sembra funzionare. Mi mancava la conversione implicita. – bsh152s

+0

@ bsh152s - fantastico, grazie per il follow-up –

+0

Brillante !!!!!! – Hans

5

gcroot <> è un puntatore intelligente. Puoi lanciare il cast per ottenere l'handle di tracciamento:

IMyInterface^ itf = dynamic_cast<IMyInterface^>((Object^)m_pDataObject); 

La risposta di Steve va bene anch'essa.

Problemi correlati