Неразрешенный внешний символ для метода IAudioClient :: Initialize. WASAPI API

Я пытаюсь получить образец записи входного аудиопотока и запустить его через инструменты 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)

Любые предложения очень ценятся, так как я сейчас изучаю хорошую книгу по С ++. Что случилось с этой ошибкой?

0

Решение

Неправильно:

hr = iac -> IAudioClient::Initialize(...

Правильный:

hr = iac->Initialize(...

Здесь вы должны вызывать виртуальный метод указателя интерфейса COM, а не конкретную функцию в обход vtable (см. этот вопрос для смежного обсуждения).

1

Другие решения


По вопросам рекламы [email protected]