⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vlccontrol2.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
};STDMETHODIMP VLCMessages::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCMessages::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo){    if( NULL == ppTInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )    {        _p_typeinfo->AddRef();        *ppTInfo = _p_typeinfo;        return NOERROR;    }    *ppTInfo = NULL;    return E_NOTIMPL;};STDMETHODIMP VLCMessages::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,        UINT cNames, LCID lcid, DISPID* rgDispID){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);    }    return E_NOTIMPL;};STDMETHODIMP VLCMessages::Invoke(DISPID dispIdMember, REFIID riid,        LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,        VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,                pVarResult, pExcepInfo, puArgErr);    }    return E_NOTIMPL;};STDMETHODIMP VLCMessages::get__NewEnum(LPUNKNOWN* _NewEnum){    if( NULL == _NewEnum )        return E_POINTER;    IVLCMessageIterator* iter = NULL;    iterator(&iter);    *_NewEnum= new VLCEnumIterator<IID_IEnumVARIANT,                       IEnumVARIANT,                       VARIANT,                       VLCMessageSTLIterator>                       (VLCMessageSTLIterator(iter), VLCMessageSTLIterator(NULL));    return *_NewEnum ? S_OK : E_OUTOFMEMORY;};STDMETHODIMP VLCMessages::clear(){    libvlc_log_t *p_log = _p_vlclog->_p_log;    if( p_log )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_log_clear(p_log, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCMessages,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }    }    return NOERROR;};STDMETHODIMP VLCMessages::get_count(long* count){    if( NULL == count )        return E_POINTER;    libvlc_log_t *p_log = _p_vlclog->_p_log;    if( p_log )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        *count = libvlc_log_count(p_log, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCMessages,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }    }    else        *count = 0;    return S_OK;};STDMETHODIMP VLCMessages::iterator(IVLCMessageIterator** iter){    if( NULL == iter )        return E_POINTER;    *iter = new VLCMessageIterator(_p_instance, _p_vlclog);    return *iter ? S_OK : E_OUTOFMEMORY;};/*******************************************************************************/VLCMessageIterator::VLCMessageIterator(VLCPlugin *p_instance, VLCLog* p_vlclog ) :    _p_instance(p_instance),    _p_typeinfo(NULL),    _refcount(1),    _p_vlclog(p_vlclog){    if( p_vlclog->_p_log )    {        _p_iter = libvlc_log_get_iterator(p_vlclog->_p_log, NULL);    }    else        _p_iter = NULL;};VLCMessageIterator::~VLCMessageIterator(){    if( _p_iter )        libvlc_log_iterator_free(_p_iter, NULL);    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCMessageIterator::loadTypeInfo(void){    HRESULT hr = NOERROR;    if( NULL == _p_typeinfo )    {        ITypeLib *p_typelib;        hr = _p_instance->getTypeLib(LOCALE_USER_DEFAULT, &p_typelib);        if( SUCCEEDED(hr) )        {            hr = p_typelib->GetTypeInfoOfGuid(IID_IVLCMessageIterator, &_p_typeinfo);            if( FAILED(hr) )            {                _p_typeinfo = NULL;            }            p_typelib->Release();        }    }    return hr;};STDMETHODIMP VLCMessageIterator::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCMessageIterator::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo){    if( NULL == ppTInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )    {        _p_typeinfo->AddRef();        *ppTInfo = _p_typeinfo;        return NOERROR;    }    *ppTInfo = NULL;    return E_NOTIMPL;};STDMETHODIMP VLCMessageIterator::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,        UINT cNames, LCID lcid, DISPID* rgDispID){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);    }    return E_NOTIMPL;};STDMETHODIMP VLCMessageIterator::Invoke(DISPID dispIdMember, REFIID riid,        LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,        VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,                pVarResult, pExcepInfo, puArgErr);    }    return E_NOTIMPL;};STDMETHODIMP VLCMessageIterator::get_hasNext(VARIANT_BOOL* hasNext){    if( NULL == hasNext )        return E_POINTER;    if( _p_iter &&  _p_vlclog->_p_log )    {        libvlc_exception_t ex;        libvlc_exception_init(&ex);        *hasNext = libvlc_log_iterator_has_next(_p_iter, &ex) ?                                     VARIANT_TRUE : VARIANT_FALSE;        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCMessageIterator,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }    }    else    {        *hasNext = VARIANT_FALSE;    }    return S_OK;};STDMETHODIMP VLCMessageIterator::next(IVLCMessage** message){    if( NULL == message )        return E_POINTER;    if( _p_iter &&  _p_vlclog->_p_log )    {        struct libvlc_log_message_t buffer;        buffer.sizeof_msg = sizeof(buffer);        libvlc_exception_t ex;        libvlc_exception_init(&ex);        libvlc_log_iterator_next(_p_iter, &buffer, &ex);        if( libvlc_exception_raised(&ex) )        {            _p_instance->setErrorInfo(IID_IVLCMessageIterator,                         libvlc_exception_get_message(&ex));            libvlc_exception_clear(&ex);            return E_FAIL;        }        *message = new VLCMessage(_p_instance, buffer);        return *message ? NOERROR : E_OUTOFMEMORY;    }    return E_FAIL;};/*******************************************************************************/VLCMessage::~VLCMessage(){    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCMessage::loadTypeInfo(void){    HRESULT hr = NOERROR;    if( NULL == _p_typeinfo )    {        ITypeLib *p_typelib;        hr = _p_instance->getTypeLib(LOCALE_USER_DEFAULT, &p_typelib);        if( SUCCEEDED(hr) )        {            hr = p_typelib->GetTypeInfoOfGuid(IID_IVLCMessage, &_p_typeinfo);            if( FAILED(hr) )            {                _p_typeinfo = NULL;            }            p_typelib->Release();        }    }    return hr;};STDMETHODIMP VLCMessage::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCMessage::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo){    if( NULL == ppTInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )    {        _p_typeinfo->AddRef();        *ppTInfo = _p_typeinfo;        return NOERROR;    }    *ppTInfo = NULL;    return E_NOTIMPL;};STDMETHODIMP VLCMessage::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,        UINT cNames, LCID lcid, DISPID* rgDispID){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);    }    return E_NOTIMPL;};STDMETHODIMP VLCMessage::Invoke(DISPID dispIdMember, REFIID riid,        LCID lcid, WORD wFlags, DISPPARAMS* pDispParams,        VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispInvoke(this, _p_typeinfo, dispIdMember, wFlags, pDispParams,                pVarResult, pExcepInfo, puArgErr);    }    return E_NOTIMPL;};inline const char *msgSeverity(int sev){    switch( sev )    {        case 0:            return "info";        case 1:            return "error";        case 2:            return "warning";        default:            return "debug";    }};STDMETHODIMP VLCMessage::get__Value(VARIANT* _Value){    if( NULL == _Value )        return E_POINTER;    char buffer[256];    snprintf(buffer, sizeof(buffer), "%s %s %s: %s",        _msg.psz_type, _msg.psz_name, msgSeverity(_msg.i_severity), _msg.psz_message);    V_VT(_Value) = VT_BSTR;    V_BSTR(_Value) = BSTRFromCStr(CP_UTF8, buffer);    return S_OK;};STDMETHODIMP VLCMessage::get_severity(long* level){    if( NULL == level )        return E_POINTER;    *level = _msg.i_severity;    return S_OK;};STDMETHODIMP VLCMessage::get_type(BSTR* type){    if( NULL == type )        return E_POINTER;    *type = BSTRFromCStr(CP_UTF8, _msg.psz_type);    return NOERROR;};STDMETHODIMP VLCMessage::get_name(BSTR* name){    if( NULL == name )        return E_POINTER;    *name = BSTRFromCStr(CP_UTF8, _msg.psz_name);    return NOERROR;};STDMETHODIMP VLCMessage::get_header(BSTR* header){    if( NULL == header )        return E_POINTER;    *header = BSTRFromCStr(CP_UTF8, _msg.psz_header);    return NOERROR;};STDMETHODIMP VLCMessage::get_message(BSTR* message){    if( NULL == message )        return E_POINTER;    *message = BSTRFromCStr(CP_UTF8, _msg.psz_message);    return NOERROR;};/*******************************************************************************/VLCPlaylistItems::~VLCPlaylistItems(){    if( _p_typeinfo )        _p_typeinfo->Release();};HRESULT VLCPlaylistItems::loadTypeInfo(void){    HRESULT hr = NOERROR;    if( NULL == _p_typeinfo )    {        ITypeLib *p_typelib;        hr = _p_instance->getTypeLib(LOCALE_USER_DEFAULT, &p_typelib);        if( SUCCEEDED(hr) )        {            hr = p_typelib->GetTypeInfoOfGuid(IID_IVLCPlaylistItems, &_p_typeinfo);            if( FAILED(hr) )            {                _p_typeinfo = NULL;            }            p_typelib->Release();        }    }    return hr;};STDMETHODIMP VLCPlaylistItems::GetTypeInfoCount(UINT* pctInfo){    if( NULL == pctInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )        *pctInfo = 1;    else        *pctInfo = 0;    return NOERROR;};STDMETHODIMP VLCPlaylistItems::GetTypeInfo(UINT iTInfo, LCID lcid, LPTYPEINFO* ppTInfo){    if( NULL == ppTInfo )        return E_INVALIDARG;    if( SUCCEEDED(loadTypeInfo()) )    {        _p_typeinfo->AddRef();        *ppTInfo = _p_typeinfo;        return NOERROR;    }    *ppTInfo = NULL;    return E_NOTIMPL;};STDMETHODIMP VLCPlaylistItems::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,        UINT cNames, LCID lcid, DISPID* rgDispID){    if( SUCCEEDED(loadTypeInfo()) )    {        return DispGetIDsOfNames(_p_typeinfo, rgszNames, cNames, rgDispID);    }    return E_NOTIMPL;};

⌨️ 快捷键说明

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