我已经把这个问题疯狂了几个小时了。本质上,我已经开始开发一种服务,允许用户通过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。任何输入都非常感谢。
答案 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(¤tVolume);
newVolume = currentVolume + adjustBy;
if (newVolume < 0) {
newVolume = 0;
}
pVolumeControl->SetMasterVolume(newVolume,NULL);
return 0;
}
我不得不补充道:
allocationResult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
对类构造函数初始化组件对象模型库以供使用。