Я пытаюсь управлять аудиопотоками с помощью программы, но у меня возникают проблемы даже при получении доступа к аудиоустройству. Как примечание: я новичок в C ++, и я изучил кодирование на Java, поэтому я новичок в идее указателей, а также в идеях HRESULT и других вещей для Windows. На этой странице написано, что я должен сначала перечислить аудио конечное устройство. Затем я провел еще несколько поисков, чтобы выяснить, как это сделать, и меня перевели на страницу Перечисление аудиоустройств . На этой странице мне сказали использовать MMDevice API . На этой странице показан этот код:
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
hr = CoCreateInstance(
CLSID_MMDeviceEnumerator, NULL,
CLSCTX_ALL, IID_IMMDeviceEnumerator,
(void**)&pEnumerator);
Я пытался использовать это и
(void**)&pEnumerator
не работал, поэтому я нашел другой код, который использовал
reinterpret_cast<>();
чтобы справиться с этой ошибкой. Но проблема, с которой я сталкиваюсь, заключается в том, что я не получаю указатель. Мой код ниже.
CoInitializeEx(NULL, COINIT_MULTITHREADED);
IMMDeviceEnumerator *pEnumerator;
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
//print CLSID to see if I get any ids
std::cout << CLSID_MMDeviceEnumerator.Data1 << "\n";
std::cout << CLSID_MMDeviceEnumerator.Data2 << "\n";
std::cout << CLSID_MMDeviceEnumerator.Data3 << "\n";
std::cout << CLSID_MMDeviceEnumerator.Data4 << "\n";
//temp variable to hold the result of the CoCreateInstance call
LPVOID *ppv = NULL;
HRESULT retrivedDeviceEnumerator = CoCreateInstance(
CLSID_MMDeviceEnumerator,
NULL,
CLSCTX_ALL,
IID_IMMDeviceEnumerator,
ppv
);
//I'm sure there is a better way to print and end the line
//print mem location to see if I am getting a result
std::cout << ppv << "\n";
//cast the result to correct type
pEnumerator = (reinterpret_cast<IMMDeviceEnumerator*>(ppv));
Этот код печатает некоторые числа для строк CLSID, поэтому я думаю, что они получают правильные значения, но я получаю 00000000, когда печатаю указатель ppv.