GetToc, fonction pour générer une table des matières
La fonction suivante est une fonction d’assistance dans un exemple de programme décrit dans Génération automatique d’une table des matières.
HRESULT GetToc(IDMOWrapperFilter* pWrap, IToc** ppToc)
{
IPropertyStore* pStore = NULL;
HRESULT hr = pWrap->QueryInterface(IID_IPropertyStore, (VOID**)&pStore);
if(SUCCEEDED(hr))
{
PROPVARIANT pv;
PropVariantInit(&pv);
pv.vt = VT_BOOL;
pv.bVal = VARIANT_TRUE;
hr = pStore->SetValue(MFPKEY_TOCGENERATOR_ENDSIGNAL, pv);
if(SUCCEEDED(hr))
{
for(LONG j = 0; j < 10; ++j)
{
PropVariantClear(&pv);
pv.vt = VT_BOOL;
hr = pStore->GetValue(MFPKEY_TOCGENERATOR_TOCREADY, &pv);
if(SUCCEEDED(hr) && 1 == pv.bVal) // Note: 1 is not equal to VARIANT_TRUE.
{
PropVariantClear(&pv);
pv.vt = VT_UNKNOWN;
hr = pStore->GetValue(MFPKEY_TOCGENERATOR_TOCOBJECT, &pv);
if(SUCCEEDED(hr))
{
*ppToc = (IToc*)pv.punkVal;
}
break;
}
Sleep(200);
hr = ERROR_TIMEOUT;
}
}
pStore->Release();
pStore = NULL;
}
return hr;
}
Rubriques connexes