📄 vlccontrol2.cpp
字号:
STDMETHODIMP VLCPlaylistItems::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 VLCPlaylistItems::get_count(long* count){ if( NULL == count ) return E_POINTER; libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); *count = libvlc_playlist_items_count(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylistItems, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylistItems::clear(){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_clear(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylistItems, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylistItems::remove(long item){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_delete_item(p_libvlc, item, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylistItems, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};/*******************************************************************************/VLCPlaylist::~VLCPlaylist(){ delete _p_vlcplaylistitems; if( _p_typeinfo ) _p_typeinfo->Release();};HRESULT VLCPlaylist::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_IVLCPlaylist, &_p_typeinfo); if( FAILED(hr) ) { _p_typeinfo = NULL; } p_typelib->Release(); } } return hr;};STDMETHODIMP VLCPlaylist::GetTypeInfoCount(UINT* pctInfo){ if( NULL == pctInfo ) return E_INVALIDARG; if( SUCCEEDED(loadTypeInfo()) ) *pctInfo = 1; else *pctInfo = 0; return NOERROR;};STDMETHODIMP VLCPlaylist::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 VLCPlaylist::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 VLCPlaylist::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 VLCPlaylist::get_itemCount(long* count){ if( NULL == count ) return E_POINTER; *count = 0; libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); *count = libvlc_playlist_items_count(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::get_isPlaying(VARIANT_BOOL* isPlaying){ if( NULL == isPlaying ) return E_POINTER; libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); *isPlaying = libvlc_playlist_isplaying(p_libvlc, &ex) ? VARIANT_TRUE: VARIANT_FALSE; if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::add(BSTR uri, VARIANT name, VARIANT options, long* item){ if( NULL == item ) return E_POINTER; if( 0 == SysStringLen(uri) ) return E_INVALIDARG; libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); char *psz_uri = NULL; if( SysStringLen(_p_instance->getBaseURL()) > 0 ) { /* ** if the MRL a relative URL, we should end up with an absolute URL */ LPWSTR abs_url = CombineURL(_p_instance->getBaseURL(), uri); if( NULL != abs_url ) { psz_uri = CStrFromWSTR(CP_UTF8, abs_url, wcslen(abs_url)); CoTaskMemFree(abs_url); } else { psz_uri = CStrFromBSTR(CP_UTF8, uri); } } else { /* ** baseURL is empty, assume MRL is absolute */ psz_uri = CStrFromBSTR(CP_UTF8, uri); } if( NULL == psz_uri ) { return E_OUTOFMEMORY; } int i_options; char **ppsz_options; hr = VLCControl::CreateTargetOptions(CP_UTF8, &options, &ppsz_options, &i_options); if( FAILED(hr) ) { CoTaskMemFree(psz_uri); return hr; } char *psz_name = NULL; VARIANT v_name; VariantInit(&v_name); if( SUCCEEDED(VariantChangeType(&v_name, &name, 0, VT_BSTR)) ) { if( SysStringLen(V_BSTR(&v_name)) > 0 ) psz_name = CStrFromBSTR(CP_UTF8, V_BSTR(&v_name)); VariantClear(&v_name); } *item = libvlc_playlist_add_extended(p_libvlc, psz_uri, psz_name, i_options, const_cast<const char **>(ppsz_options), &ex); VLCControl::FreeTargetOptions(ppsz_options, i_options); CoTaskMemFree(psz_uri); if( psz_name ) CoTaskMemFree(psz_name); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::play(){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_play(p_libvlc, -1, 0, NULL, &ex); if( libvlc_exception_raised(&ex) ) { libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::playItem(long item){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_play(p_libvlc, item, 0, NULL, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::togglePause(){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_pause(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::stop(){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_stop(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::next(){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_next(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::prev(){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_prev(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::clear(){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_clear(p_libvlc, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::removeItem(long item){ libvlc_instance_t* p_libvlc; HRESULT hr = _p_instance->getVLC(&p_libvlc); if( SUCCEEDED(hr) ) { libvlc_exception_t ex; libvlc_exception_init(&ex); libvlc_playlist_delete_item(p_libvlc, item, &ex); if( libvlc_exception_raised(&ex) ) { _p_instance->setErrorInfo(IID_IVLCPlaylist, libvlc_exception_get_message(&ex)); libvlc_exception_clear(&ex); return E_FAIL; } return NOERROR; } return hr;};STDMETHODIMP VLCPlaylist::get_items(IVLCPlaylistItems** obj){ if( NULL == obj ) return E_POINTER; *obj = _p_vlcplaylistitems; if( NULL != _p_vlcplaylistitems ) { _p_vlcplaylistitems->AddRef(); return NOERROR; } return E_OUTOFMEMORY;};/*******************************************************************************/VLCVideo::~VLCVideo(){ if( _p_typeinfo ) _p_typeinfo->Release();};HRESULT VLCVideo::loadTypeInfo(void){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -