在WindowsRT / Metro中,如何将ref ^指针转换为原始指针?
例如,我想将指向控件的指针传递给旧的C风格回调,该回调期望参数为void*
:
// this = type derived from Windows::UI::Xaml::Controls::Page
SetCallback(this);
然而,我收到错误:
无法将参数1从“MyProject :: MainPage ^ const”转换为“void *”
如何将MainPage
转换为原始指针(不带C-style / reinterpret_casts)?
答案 0 :(得分:4)
可以使用T^
(*)将T*
转换为其对应的指针类型reinterpret_cast
。最简单,最正确的代码是将T^
转换为Object^
,然后转换为IInspectable*
:
IInspectable* AsInspectable(Platform::Object^ o)
{
return reinterpret_cast<IInspectable*>(o);
}
IInspectable*
可转换为void*
,但您确实需要注意COM生存期规则(我不知道您计划对此void*
做什么,所以我不能在这里提出任何具体的建议。)
我在文章"Types That Wear Hats."中详细讨论了这个问题。您可能会发现其中一些信息有用。
(*)您要求在没有reinterpret_cast
的情况下执行此操作的方法,但该限制没有意义:reinterpret_cast
是支持的执行此转换的方法。