-{
- 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;
-};
-
-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_exception_t ex;
- libvlc_exception_init(&ex);
-
- *count = _p_instance->playlist_count(&ex);
- return exception_bridge(&ex);
-};
-
-STDMETHODIMP VLCPlaylistItems::clear()
-{
- libvlc_exception_t ex;
- libvlc_exception_init(&ex);
-
- _p_instance->playlist_clear(&ex);
- return exception_bridge(&ex);
-};
-
-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);
-
- _p_instance->playlist_delete_item(item, &ex);
- hr = exception_bridge(&ex);
- }
- 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;