1

在 WindowsRT / Metro 中,如何将 ref ^ 指针转换为原始指针?

例如,我想将一个指向控件的指针传递给旧的 C 样式回调,它期望参数为void*

// this = type derived from Windows::UI::Xaml::Controls::Page
SetCallback(this);

但是,我收到一个错误:

无法将参数 1 从“MyProject::MainPage ^const”转换为“void *”

如何转换MainPage为原始指针(没有 C 样式/reinterpret_casts)?

4

1 回答 1

4

AT^可以T*使用reinterpret_cast(*)转换为其对应的指针类型。最简单、正确的代码是将 a 转换T^Object^然后转换为IInspectable*

IInspectable* AsInspectable(Platform::Object^ o)
{
    return reinterpret_cast<IInspectable*>(o);
}

IInspectable*可转换为void*,尽管您确实需要注意 COM 生命周期规则(我不知道您打算对此做什么void*,所以我无法在此提出任何具体建议)。

我在“戴帽子的类型”一文中详细讨论了这顶帽子。 您可能会发现其中一些信息很有帮助。


(*) 您要求一种不使用 的方法reinterpret_cast,但该限制没有意义: reinterpret_cast是执行此转换的受支持方法。

于 2013-01-08T16:45:12.557 回答