.net 我如何才能铸造gcroot<;对象^>;以C++;。网?

.net 我如何才能铸造gcroot<;对象^>;以C++;。网?,.net,casting,c++-cli,visual-c++,.net,Casting,C++ Cli,Visual C++,我不得不用gcroot做一些奇怪的事情,但我在动态转换行中遇到了以下错误:“无法使用'dynamic_cast'将'gcroot'转换为'IMyInterface^”。在C#中,您可以轻松地将通用对象转换为任何接口。如果对象没有实现接口,但它会编译,则可能会出现运行时错误 gcroot<Object^> m_pDataObject; IMyInterface obj = dynamic_cast<IMyInterface^>(m_pDataObject); gcroot

我不得不用gcroot做一些奇怪的事情,但我在动态转换行中遇到了以下错误:“无法使用'dynamic_cast'将'gcroot'转换为'IMyInterface^”。在C#中,您可以轻松地将通用对象转换为任何接口。如果对象没有实现接口,但它会编译,则可能会出现运行时错误

gcroot<Object^> m_pDataObject;
IMyInterface obj = dynamic_cast<IMyInterface^>(m_pDataObject);
gcroot m_pDataObject;
IMyInterface obj=动态投射(m_pDataObject);
这可以工作(编译)并且应该做您想要做的事情(用您所需的界面替换模块
IDisposable
):

gcroot m_pDataObject;
Object ^obj=m_pDataObject;//从gcroot隐式转换
IDisposable ^intf=dynamic_cast(obj);//或safe_cast
gcroot是一个智能指针。您可以强制转换以从中获取跟踪句柄:

IMyInterface^ itf = dynamic_cast<IMyInterface^>((Object^)m_pDataObject);
IMyInterface^itf=dynamic_cast((Object^)m_pDataObject);
史蒂夫的回答也很好

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