2017-11-21 11 views
0

저는 몇 시간 동안이 문제로 인해 화를 냈습니다. 필자는 TCP를 통해 패킷을 서버 응용 프로그램에 보내 개별 응용 프로그램의 오디오 볼륨을 제어 할 수있는 서비스 개발을 시작했습니다. 이것은 C++에 대한 지식을 향상시키는 취미 프로젝트입니다.ISimpleAudioVolume에 대한 IAudioSessionControl에서 QueryInterface를 사용하여 컴파일하지 못했습니다.

세션에 대한 포인터 목록을 작성하기 위해 ISessionEnumerator 인터페이스를 사용하고 있습니다. 세션에서 직접 볼륨을 제어 할 수 있다고 생각했을 것입니다. 빨리 ISimpleAudioVolume 인터페이스로 빨려 들어 다른 인터페이스가 필요할 것이라고 생각했습니다. 지금까지의 인터페이스를 검색하기위한 다음과 같은 코드를 가지고 : 그리고 내 헤더 파일에 다음과 같은 헤더를 포함하고

LNK2001 unresolved external symbol _IID_ISimpleAudioVolume 

:

#pragma once 
#include <Audioclient.h> 
#include <audiopolicy.h> 
#include <mmdeviceapi.h> 
#include <AudioSessionTypes.h> 
#include <endpointvolume.h> 
#include <vector> 
이것은 컴파일 오류가 발생
int AudioManager::AdjustVolumeBy(IAudioSessionControl * pSession, int adjustBy) { 
    void * pVolumeControl; 
    pSession->QueryInterface(IID_ISimpleAudioVolume, &pVolumeControl); 
    return 0; 
} 

또한 프로젝트를 만들 때 ATL 및 MFC를 포함하여 프로젝트를 만들었습니다. 모든 입력은 크게 감사드립니다.

+0

아마도 _WIN32_WINNT 및 WINVER 변수를 Vista 이상으로 설정하지 않았습니까? https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt –

+0

제안을 주셔서 감사합니다. 불행히도,이 프로젝트에 대한 Visual Studio에서 만든 헤더 파일에이 문제를 해결할 때 도움이되지 않습니다. –

답변

0

필자는 링커 입력에서 "추가 종속성"에 "winmm.lib"를 추가하여이 문제를 해결할 수있었습니다.

또한,이 문제가 발생할 수 있습니다 다른 사람의 참조를 위해, 원래 볼륨 조정 코드로 변경되었습니다

int AudioManager::AdjustVolumeBy(IAudioSessionControl * pSession, float adjustBy) { 
    ISimpleAudioVolume * pVolumeControl; 
    float currentVolume;float newVolume; 
    pSession->QueryInterface(__uuidof(ISimpleAudioVolume),(void**)&pVolumeControl); 
    pVolumeControl->GetMasterVolume(&currentVolume); 
    newVolume = currentVolume + adjustBy; 
    if (newVolume < 0) { 
     newVolume = 0; 
    } 
    pVolumeControl->SetMasterVolume(newVolume,NULL); 
    return 0; 
} 

그리고 추가했다 :

allocationResult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); 

를 클래스에 생성자를 사용하여 Component Object Model 라이브러리를 초기화합니다.