mciSendString возвращает один символ

Рейтинг: 0Ответов: 1Опубликовано: 22.04.2023

Хочу вернуть время и текущую позицию музыки, воспроизводимой с помощью mciSendString в С++

char* pos = new char[128];
char* dur = new char[128];

mciSendString(L"status MY_SND position", (LPWSTR)pos, 128, 0);
mciSendString(L"status MY_SND length", (LPWSTR)dur, 128, 0);

cout << pos << endl << dur << endl;
clear();
continue;

Но программа выводит лишь один символ размера аудио. Например, в моём случае музыка на 5 минут (300 секунд), в результате dur хранит в себе лишь один символ 3.

Ответы

▲ 1

mciSendString в режиме Unicode (который, судя по L"status MY... вы и используете) в качестве второго параметра использует массив широких символов.

то есть вам надо использовать буфер типа wchar_t*, создавая его статически или динамически, например,

wchar_t* dur = new wchar_t[128];
mciSendString(L"status MY_SND length", dur, 128, 0);

Что именно содержится в буфере (если, конечно, функция возвращает нулевое значчение, говорящее о том, что она завершилась успешно) - зависит от переданной команды.