0

以下を使用する代替手段はありますか?

class IGraphBuilder;

public ref class Device
{
private:
    IGraphBuilder* pGraphBuilder;

public:
    void Configure()
    {
        pin_ptr<IGraphBuilder*> ppGraphBuilder = &pGraphBuilder;

        HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
            NULL,
            CLSCTX_INPROC,
            IID_IGraphBuilder, (void**)ppGraphBuilder);

reinterpret_cast(ppGraphBuilder) はコンパイルされますが、これがこの場合に正しいかどうかは少し混乱しています。

これが C++/CLI でない場合 (&NativeMember実際には を意味しますinterior_ptr<Type>(NativeMember))、単純に使用しますstatic_cast<void**>(&pGraphBuilder)が、次のように正しくキャストしpin_ptrた後でもコンパイルされません。

pin_ptr<IGraphBuilder*> ppGraphBuilder = &pGraphBuilder;
static_cast<void**>(ppGraphBuilder)

解決策はありますか、または pin_ptr が奇妙であるため (void**) を使用せざるを得ませんか?

4

1 に答える 1

1

reinterpret_cast(したがって、C キャスト) は問題がある可能性がありますが、pin_ptr. 実際、最初に変換演算子を呼び出す必要がありますcli::pin_ptr<IGraphBuilder*>(IGraphBuilder**したがって、コンパイラからの苦情)。

reinterpret_cast<void**>(static_cast<IGraphBuilder**>(ppGraphBuilder))

正しい。IGraphBuilder**最初にタイプの中間変数を導入したい場合があります。

pin_ptr<IGraphBuilder*> p = &pGraphBuilder;
IGraphBuilder** ppGraphBuilder = p;

HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
        NULL,
        CLSCTX_INPROC,
        IID_IGraphBuilder, reinterpret_cast<void**>(p));
于 2012-04-24T21:26:13.330 に答える