2010-10-14 5 views
5

Muszę zrobić kilka dziwnych rzeczy za pomocą gcroot, ale pojawia się następujący błąd w linii dynamicznej obsady: "nie można użyć 'dynamic_cast' do konwersji z 'gcroot' na 'IMyInterface ^'. W języku C# możesz łatwo cast obiektu ogólnego do każdego interfejsu. można uzyskać runtime error, jeśli obiekt nie implementuje interfejsu ale byłoby skompilować.Jak mogę rzucić gcroot <Object^> do IMyInterface w C++ .net?

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

Odpowiedz

9

to działa (kompiluje) i powinien robić to, co chcesz (moduł zastępując IDisposable z wymaganym interfejsem):

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

To wydaje się działać. Brakowało mi niejawnej konwersji. – bsh152s

+0

@ bsh152s - świetnie, dzięki za kontynuację –

+0

Genialny !!!!!! – Hans

5

gcroot <> to inteligentny wskaźnik. Możesz rzucić, aby uzyskać uchwyt śledzenia z tego:

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

Odpowiedź Steve też jest dobra.

Powiązane problemy