1

WindowsRT / Metroで、ref ^ポインターをrawポインターに変換するにはどうすればよいですか?

たとえば、コントロールへのポインタを古い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

Aは、 (*)を使用T^して対応するポインタタイプに変換できます。最も単純で正しいコードは、をに変換してから:にキャストすることです。T*reinterpret_castT^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 に答える