2010-10-14 47 views
5

我不得不用gcroot做一些奇怪的事情,但是我在動態投射線上得到了下面的錯誤:「不能使用'dynamic_cast'從'gcroot'轉換爲'IMyInterface ^'在C#中,你可以很容易地蒙上了通用對象的任何接口。如果該對象未實現該接口,但它會編譯你可能會得到一個運行時錯誤。如何在C++。net中將gcroot <Object^>轉換爲IMyInterface?

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

回答

9

此作品(編譯)和應該做你想要什麼(模塊更換IDisposable與您所需的接口):

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

這似乎工作。我錯過了隱式轉換。 – bsh152s 2010-10-14 19:54:36

+0

@ bsh152s - 太棒了,感謝您的跟進 – 2010-10-14 20:06:12

+0

輝煌!!!!!! – Hans 2015-12-20 14:59:54

5

gcroot <>是一個智能指針。你可以施放以獲得跟蹤手柄:

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

史蒂夫的回答是好的btw。

相關問題