在IAudioSessionControl上使用QueryInterface for ISimpleAudioVolume无法编译

时间:2017-11-21 00:41:09

标签: c++ windows visual-studio-2015

我已经把这个问题疯狂了几个小时了。本质上,我已经开始开发一种服务,允许用户通过TCP将数据包发送到服务器应用程序来控制各个应用程序的音量。这是一个业余爱好者项目,旨在进一步增强我对C ++的了解。

我使用ISessionEnumerator接口来构建会话指针列表。我本以为可以直接从会话中控制音量。我很快发现我需要另外一个接口,作为ISimpleAudioVolume接口。到目前为止,我有以下代码用于检索接口:

int AudioManager::AdjustVolumeBy(IAudioSessionControl * pSession, int adjustBy) {
    void * pVolumeControl;
    pSession->QueryInterface(IID_ISimpleAudioVolume, &pVolumeControl);
    return 0;
}

这产生了编译错误:

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>

此外,在创建项目时,我创建了它,包括ATL和MFC。任何输入都非常感谢。

1 个答案:

答案 0 :(得分:0)

我最终设法通过添加&#34; winmm.lib&#34;来解决这个问题。到&#34;附加依赖&#34;在链接器输入中。

此外,对于可能遇到此问题的任何其他人的参考,原始音量调整代码已更改为:

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

对类构造函数初始化组件对象模型库以供使用。