2013-03-14 2 views
0

У меня есть следующая функция Я звоню, чтобы распечатать конечную точку и дружественное имя перечисляемых аудио конечных точек:Core Audio для Windows Error

void EPPrint(void) 
{  
    HRESULT hr; 
    IMMDeviceEnumerator *pEnumerator = NULL; 
    IMMDeviceCollection *pCollection = NULL; 
    IMMDevice *pEp = NULL; 
    IPropertyStore *pProps =NULL; 
    UINT count; 
    PWSTR strID; 
    PROPVARIANT pv; 

    hr = CoCreateInstance(CLSID_MMDeviceEnumerator ,NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void **)&pEnumerator); 
    hr = pEnumerator -> EnumAudioEndpoints(eRender,DEVICE_STATE_ACTIVE,&pCollection); 
    hr = pCollection ->GetCount(&count); 
    if(count==0) 
    { 
    } 
    for (ULONG i =0; i<count; ++i) 
    { 
     hr= pCollection->Item(i,&pEp); 
     hr = pEp ->GetId(&strID); 
     hr = pEp ->OpenPropertyStore(STGM_READ,&pProps); 
     PropVariantInit(&pv); 
     hr = pProps ->GetValue(PKEY_Device_FriendlyName, &pv); 
     printf("Enpoint %d: \"%S\" (%S)\n",i,pv.pwszVal, strID); 
    } 
} 

Однако я получаю ошибку Unhandled exception at 0x008e104a in EPAudioControl.exe: 0xC0000005: Access violation reading location 0x00000000.

выполнения, нарушающую программу на линии hr = pEnumeartor -> ....

Нужна ли программе необходимость каких-либо специальных разрешений на окна для правильной работы?

ответ

0

Оказывается, pEnumerator был указателем NULL. Вызов CoCreateInstance не заполнял pEnumerator должным образом. Это связано с тем, что перед CoCreateInstance должен быть вызов CoInitialize(NULL). Как только я положил вызов CoInitiliaze(NULL) в программу, ошибка исчезла.

Смежные вопросы