2014-09-14 1 views
0

Я пытаюсь получить образец записи аудиопотока ввода и запустить через инструменты WASAPI. Вот ссылка на то, что я имею в виду: http://msdn.microsoft.com/en-us/library/windows/desktop/dd370800(v=vs.85).aspxНеразрешенный внешний символ для IAudioClient :: Инициализация. WASAPI API

Вот соответствующий код:

#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 *)" (? 
[email protected]@@[email protected]@[email protected]@[email protected]@@Z) 
referenced in function "public: void __thiscall InputTest::TakeInput(void)" (? 
[email protected]@@QAEXXZ) 

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

ответ

1

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

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

Правильно:

hr = iac->Initialize(... 

Вы должны называть виртуальный метод указателя COM интерфейса здесь, а не конкретная функция обхода виртуальные таблицы (см this question для соответствующего обсуждения).

Смежные вопросы