cofeline.cpp

来自「com编程」· C++ 代码 · 共 73 行

CPP
73
字号
// CoFeline.cpp : Implementation of CoFeline

#include "stdafx.h"
#include <hrx.h>
#include <smartif.h>
#include "MeowMoniker.h"
#include "CoFeline.h"

#define BAD_POINTER_RETURN(p) if( !p ) return E_POINTER
#define BAD_POINTER_RETURN_OR_ZERO(p) if( !p ) return E_POINTER; else *p = 0

/////////////////////////////////////////////////////////////////////////////
// CoFeline

STDMETHODIMP CoFeline::GetDisplayName(
    IDispatch*  pdisp,
    BSTR*       pbstrName)
{
    BAD_POINTER_RETURN_OR_ZERO(pbstrName);
    BAD_POINTER_RETURN(pdisp);

    COM_TRY
    {
        HRX hrx;

        SI(IMoniker)    pmk;
        hrx = CreateMeowMoniker(pdisp,
                                IID_IDispatch,
                                MSHCTX_DIFFERENTMACHINE,
                                MSHLFLAGS_NORMAL,
                                pmk.RelItfRef());

        SI(IBindCtx)    pbc;
        hrx = CreateBindCtx(0, pbc.RelItfRef());

        wchar_t*    pwszDisplayName;
        hrx = pmk->GetDisplayName(pbc.Itf(), 0, &pwszDisplayName);

        *pbstrName = SysAllocString(pwszDisplayName);
        CoTaskMemFree(pwszDisplayName);
        if( !pbstrName ) hrx = E_OUTOFMEMORY;
    }
    COM_CATCH
}

STDMETHODIMP CoFeline::ParseDisplayName(
    BSTR        bstrName,
    IDispatch** ppdisp)
{
    BAD_POINTER_RETURN_OR_ZERO(ppdisp);
    BAD_POINTER_RETURN(bstrName);

    COM_TRY
    {
        HRX hrx;

        SI(IBindCtx)    pbc;
        hrx = CreateBindCtx(0, pbc.RelItfRef());

        SI(IMoniker)    pmk;
        ULONG           cchEaten;
        hrx = MkParseDisplayName(pbc.Itf(),
                                 bstrName,
                                 &cchEaten,
                                 pmk.RelItfRef());
        hrx = pmk->BindToObject(pbc.Itf(),
                                0,
                                IID_IDispatch,
                                (void**)ppdisp);
    }
    COM_CATCH
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?