如何在C++ .net中将gcroot <Object ^>转换为IMyInterface?

bsh*_*52s 5 .net casting c++-cli visual-c++

我不得不用gcroot做一些奇怪的事情,但我在动态转换线上得到以下错误:"不能使用'dynamic_cast'从'gcroot'转换为'IMyInterface ^'.在C#中,你可以很容易地投出一个任何接口的泛型对象.如果对象没有实现接口但是它会编译,你可能会遇到运行时错误.

gcroot<Object^> m_pDataObject;
IMyInterface obj = dynamic_cast<IMyInterface^>(m_pDataObject);
Run Code Online (Sandbox Code Playgroud)

Ste*_*end 11

这工作(编译),应该做你想要的(模块更换 IDisposable为你需要的接口):

gcroot<Object^> m_pDataObject;
Object^ obj = m_pDataObject;     // implicit conversion from gcroot<>
IDisposable^ intf = dynamic_cast<IDisposable^>(obj);    // or safe_cast<>
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 6

gcroot <>是一个智能指针.您可以强制转换以获取跟踪句柄:

IMyInterface^ itf = dynamic_cast<IMyInterface^>((Object^)m_pDataObject);
Run Code Online (Sandbox Code Playgroud)

史蒂夫的答案很顺便.