C++ 在ISimpleAudioVolume的IAAudioSessionControl上使用QueryInterface无法编译
几个小时以来,我一直在为这个问题发疯。基本上,我已经开始开发一种服务,允许用户通过TCP向服务器应用程序发送数据包来控制各个应用程序的音量。这是一个爱好者项目,以进一步加深我对C++的认识。 我正在使用ISessionEnumerator接口构建会话指针列表。我认为可以直接从会话中控制音量。我很快就发现我需要另一个接口,就像ISimpleAudioVolume接口一样糟糕。到目前为止,我有以下用于检索接口的代码:C++ 在ISimpleAudioVolume的IAAudioSessionControl上使用QueryInterface无法编译,c++,windows,visual-studio-2015,C++,Windows,Visual Studio 2015,几个小时以来,我一直在为这个问题发疯。基本上,我已经开始开发一种服务,允许用户通过TCP向服务器应用程序发送数据包来控制各个应用程序的音量。这是一个爱好者项目,以进一步加深我对C++的认识。 我正在使用ISessionEnumerator接口构建会话指针列表。我认为可以直接从会话中控制音量。我很快就发现我需要另一个接口,就像ISimpleAudioVolume接口一样糟糕。到目前为止,我有以下用于检索接口的代码: int AudioManager::AdjustVolumeBy(IAudioSe
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>
#pragma一次
#包括
#包括
#包括
#包括
#包括
#包括
此外,在创建项目时,我创建了它,包括ATL和MFC。非常感谢您的任何意见 通过在链接器输入中的“附加依赖项”中添加“winmm.lib”,我最终成功地解决了这个问题 此外,为了供可能遇到此问题的任何其他人参考,原始音量调整代码更改为:
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;
}
向类构造函数初始化组件对象模型库以供使用 也许您没有将_WIN32_WINNT和WINVER变量设置为Vista或更高版本?谢谢你的建议。不幸的是,当我将其包含在VisualStudio为该项目创建的头文件中时,这无助于解决问题。
allocationResult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);