3,245
社区成员
发帖
与我相关
我的任务
分享
STDMETHODIMP Cax7dliveplayer::AddSubtitle(BSTR language, BSTR url, LONG index, VARIANT picture)
{
if ( VT_DISPATCH == picture.vt ) {
CComPtr<IDispatch> pIDisp(picture.pdispVal);
UINT ctinfo = 0;
HRESULT hr = pIDisp->GetTypeInfoCount(&ctinfo);
if ( SUCCEEDED(hr) ) {
CComPtr<ITypeInfo> pITypeInfo;
hr = pIDisp->GetTypeInfo(0, LANG_NEUTRAL, &pITypeInfo);
if ( SUCCEEDED(hr) ) {
TYPEATTR* pta;
hr = pITypeInfo->GetTypeAttr(&pta);
if ( SUCCEEDED(hr) ) {
int fun_num = pta->cFuncs;
if ( TKIND_DISPATCH == pta->typekind ) {
for ( int i = 0; i < fun_num; i++ ) {
FUNCDESC* pfd;
hr = pITypeInfo->GetFuncDesc(i, &pfd);
if ( SUCCEEDED(hr) ) {
/*if ( (pfd->wFuncFlags & (FUNCFLAG_FRESTRICTED | FUNCFLAG_FHIDDEN)) == 0 )*/ {
CComBSTR bstr_name, bstr_doc;
hr = pITypeInfo->GetDocumentation(pfd->memid, &bstr_name, &bstr_doc, NULL, NULL);
if ( SUCCEEDED(hr) ) {
JTRACE2(JTRACE_INFO, JL_HIGH, _T("Cax7dliveplayer::AddSubtitle: %d: memid = %d, name = \"%s\", help = \"%s\"\n"),
i, pfd->memid, (LPCTSTR)(_bstr_t)bstr_name, (LPCTSTR)(_bstr_t)bstr_doc);
}
}
pITypeInfo->ReleaseFuncDesc(pfd);
}
}
JTRACE2(JTRACE_INFO, JL_MEDIUM, _T("Cax7dliveplayer::AddSubtitle: ok!\n"));
}
pITypeInfo->ReleaseTypeAttr(pta);
}
}
}
}
return S_FALSE;
}