【发布时间】:2020-04-07 21:34:16
【问题描述】:
我是 Qt 新手,我想使用 Windows SDK 中的 AudioSessionManager2。在使用 this example 的 Qt Creator 中,我在下面编写了附加代码。
编译时我收到消息
对 `__imp_CoCreateInstance' 的未定义引用
对 `IID_IAudioSessionManager2' 的未定义引用
在documentation for the core audio APIs 中,Microsoft 声明 API 在 Mmdevapi.dll 和 Audioses.dll 中实现。虽然我希望找到我用 Visual Studio 下载的 SDK 的两个匹配的 .lib 文件,但我只找到了 mmdevapi.lib。将其复制到我的项目并将其添加到 qt 项目文件中后,如下所示,我仍然没有成功并出现相同的错误消息。
我应该如何知道要为哪些函数导入哪些 lib 文件?
如何获取这些 lib 文件?
我是否正确导入了 lib 文件?
audiomanager.h:
#ifndef AUDIOMANAGER_H
#define AUDIOMANAGER_H
#include <mmdeviceapi.h>
#include <audiopolicy.h>
#include "utils/SafeRelease.h"
class AudioManager {
public:
AudioManager();
~AudioManager();
private:
IAudioSessionManager2 *pSessionManager = nullptr;
HRESULT init();
};
#endif // AUDIOMANAGER_H
audiomanager.cpp
#include "audiomanager.h"
AudioManager::AudioManager () {
this->init();
}
AudioManager::~AudioManager () {
SafeRelease(&pSessionManager);
}
HRESULT AudioManager::init () {
HRESULT hr = S_OK;
// initialize needed vars
IMMDeviceEnumerator *pDeviceEnumerator = nullptr;
IMMDevice *pDevice = nullptr;
// get device enumerator
hr = CoCreateInstance(
__uuidof(MMDeviceEnumerator),
nullptr,
CLSCTX_ALL,
IID_PPV_ARGS(&pDeviceEnumerator)
);
if (FAILED(hr))
goto done;
// get the default audio output (for consoles)
// !!! only for consoles? (games, system, etc.), no music, video
pDeviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
if (FAILED(hr))
goto done;
// get the session manager
hr = pDevice->Activate(
IID_IAudioSessionManager2,
CLSCTX_ALL,
nullptr,
reinterpret_cast<void**>(&pSessionManager)
);
done:
SafeRelease(&pDeviceEnumerator);
SafeRelease(&pDevice);
return hr;
}
Qt 项目文件中的行
LIBS += "$$PWD\..\libs\mmdevapi.lib"
【问题讨论】:
-
CoCreateInstance是Ole32.lib的一部分, -
对于另一个,我不完全确定,但试试
uuid.lib(其他 IID_ 在里面) -
感谢 cmets。 @ChrisMM
Ole32.Lib是正确的 - 我如何自己找出答案?是否有任何文档或任何提示?不幸的是Uuid.lib没有包含IID_IAudioSessionManager2 -
您可以在docs.micrsoft.com 上查找函数,并在底部列出了头文件、dll 和库。但是我找不到 AudioSessionManager 的,因为文档只引用头文件,而不是库。
标签: c++ qt sdk windows-10 windows-10-sdk