2013-03-14 4 views
0

나는 다음과 같은 기능을 내가 열거 오디오 엔드 포인트의 엔드 포인트와 친숙한 이름 인쇄 할 부르고있다 : 나는이 프로그램을 나누기 런타임 오류 Unhandled exception at 0x008e104a in EPAudioControl.exe: 0xC0000005: Access violation reading location 0x00000000.윈도우 코어 오디오 오류

을 얻고 그러나

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); 
    } 
} 

hr = pEnumeartor -> ... 줄에

제대로 실행하려면 프로그램에 특수한 종류의 Windows 권한이 필요합니까?

답변

0

pEnumerator가 NULL 포인터였습니다. CoCreateInstance 호출이 pEnumerator를 올바르게 채우지 못했습니다. 이것은 CoCreateInstance 전에 CoInitialize(NULL) 호출이 있어야하기 때문입니다. CoInitiliaze(NULL) 호출을 프로그램에 넣으면 오류가 사라졌습니다.

관련 문제