IAudioClient::Initialize 方法的未解析外部符号。 WASAPI API
Posted
技术标签:
【中文标题】IAudioClient::Initialize 方法的未解析外部符号。 WASAPI API【英文标题】:Unresolved External Symbol for IAudioClient::Initialize method. WASAPI API 【发布时间】:2014-09-14 09:34:05 【问题描述】:我正在尝试通过 WASAPI 工具启动并运行输入音频流记录示例。 这是我的意思的链接:http://msdn.microsoft.com/en-us/library/windows/desktop/dd370800(v=vs.85).aspx
相关代码如下:
#include "InputTest.h"
#include "Audioclient.h"
#include "Mmdeviceapi.h"
void InputTest::TakeInput()
HRESULT hr;
//Parameter variables for stream initialization
AUDCLNT_SHAREMODE ShareMode = AUDCLNT_SHAREMODE_SHARED;
DWORD da = 0;
REFERENCE_TIME bufferDuration = 10;
REFERENCE_TIME periodicity = 5;
WAVEFORMATEX pFormat;
LPCGUID AudiosessionGuid = NULL;
GUID guid2 = *AudioSessionGuid;
HRESULT guidError = UuidCreate(&guid2); //could do some error checking here. //project -> properties -> Linker -> Command Line -> Rpctr4.lib
//guid2 now has a generated value
//give ASG the address of the newly generated guid2
AudioSessionGuid = &guid2;
//Instantiate WaveFormat
pFormat.wFormatTag = WAVE_FORMAT_PCM;
pFormat.cbSize = 10; //extra information sent over stream. Usually ignored in PCM format.
//If wFormatTag is WAVE_FORMAT_PCM, nAvgBytesPerSec must equal nSamplesPerSec × nBlockAlign
pFormat.nAvgBytesPerSec = 0;
pFormat.nSamplesPerSec = 0;
pFormat.nBlockAlign = 0;
pFormat.nChannels = 2;
pFormat.wBitsPerSample = 16; //PCM standard
//Pointer for stored audio stream
IAudioClient *iac = NULL;
//Endpoint device selection
IMMDeviceEnumerator *pEnumerator = NULL;
IMMDevice *pDevice = NULL;
HRESULT de;
de = pEnumerator -> GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
hr = iac -> IAudioClient::Initialize(ShareMode, da, bufferDuration, periodicity, &pFormat, AudioSessionGuid);
`
完整的错误信息:
error LNK2019: unresolved external symbol "public: virtual long __stdcall
IAudioClient::Initialize(enum _AUDCLNT_SHAREMODE,unsigned long,__int64,__int64,struct
tWAVEFORMATEX const *,struct _GUID const *)" (?
Initialize@IAudioClient@@UAGJW4_AUDCLNT_SHAREMODE@@K_J1PBUtWAVEFORMATEX@@PBU_GUID@@@Z)
referenced in function "public: void __thiscall InputTest::TakeInput(void)" (?
TakeInput@InputTest@@QAEXXZ)
非常感谢任何建议,因为我现在正在阅读一本好的 C++ 实践书。这个错误是怎么回事?
【问题讨论】:
【参考方案1】:不正确:
hr = iac -> IAudioClient::Initialize(...
正确:
hr = iac->Initialize(...
你应该在这里调用 COM 接口指针的虚方法,而不是绕过 vtable 的特定函数(相关讨论见this question)。
【讨论】:
以上是关于IAudioClient::Initialize 方法的未解析外部符号。 WASAPI API的主要内容,如果未能解决你的问题,请参考以下文章