IDispatch* GetDispatchPtr(VARIANT &var)
{
    VARIANT *pvar = &var;
    IDispatch* pdisp = NULL;

    if (var.vt == (VT_BYREF | VT_VARIANT)) {              // 1
        pvar = var.pvarVal;
    }

    if (pvar->vt == (VT_BYREF | VT_DISPATCH)) {           // 2
        pdisp = *pvar->ppdispVal;
    }
    else if (pvar->vt == VT_DISPATCH) {                   // 3
        pdisp = pvar->pdispVal;
    }

    return pdisp;
}

ex)
ADODB::_RecordsetPtr sp(GetDispatchPtr(var));



VB에서 Host 객체를 Early Binding 으로 호출 (컴포넌트를 참조한후 실행할 때..)
=> 3번만 호출

VB에서 Host 객체를 Late Binding 으로 호출 (CreateObejct 사용..)
=> 2번만 호출

VBScript 에서 Host 객체를 Late Binding 으로 호출 (VBScript 에서는 Late Binding만 지원)
=> 1번, 3번 호출

 

'Dev > Windows' 카테고리의 다른 글

ATL Com Project VC++ 6 에서 VC++ 8 변환(업그레이드)  (0) 2009.03.27
유니코드(UNICODE), C++  (0) 2008.10.16
ffmpeg  (0) 2008.04.09
벤치마킹  (0) 2007.10.17
달라진 기능 (IIS 6.0)  (0) 2007.09.28

+ Recent posts