Пример DirectShow.Вырабатыется access violation reading
От: Аноним  
Дата: 27.07.06 10:09
Оценка:
Почти ничего не изменял в примере из MSDN. Программа должна выводить список vcm кодеков.


Вырабатывается исключение Access Violation Reading после вызова:

hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnum, 0);


Visual Studio 2003.

BOOL CdialogDlg::OnInitDialog()
{
        HRESULT hr;
    ICreateDevEnum *pSysDevEnum = NULL;
    IEnumMoniker *pEnum = NULL;
    IMoniker *pMoniker = NULL;

    hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, 
        CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, 
        (void**)&pSysDevEnum);
    if (FAILED(hr))
    {
        // Handle the error.
    }    

    hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnum, 0);
    if (hr == S_OK)  // S_FALSE means nothing in this category.
    {
        while (S_OK == pEnum->Next(1, &pMoniker, NULL))
        {
            IPropertyBag *pPropBag = NULL;
            pMoniker->BindToStorage(0, 0, IID_IPropertyBag, 
                (void **)&pPropBag);
            VARIANT var;
            VariantInit(&var);
            hr = pPropBag->Read(L"FriendlyName", &var, 0);
            if (SUCCEEDED(hr))
            {
                
                int iSel = m_List.AddString((LPCSTR)var.bstrVal);
            }   
            VariantClear(&var); 
            pPropBag->Release();
            pMoniker->Release();
        }
    }

//    SendDlgItemMessage(hDlg, IDC_CODEC_LIST,LB_SETCURSEL, 0, 0);
    pSysDevEnum->Release();
    pEnum->Release();
    return TRUE;  // return TRUE  unless you set the focus to a control
}



Вот.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.