Итак, я пытаюсь получить определенный список воспроизведения через URI, например:
sp_link *link;
sp_playlist *playlist;
sp_playlist_callbacks playlist_callbacks = { 0 };
link = sp_link_create_from_string("spotify:user:spotify:playlist:2iY4BLINjMOGJX4qHCWNju");
playlist_callbacks.playlist_state_changed = playlist_state_changed;
WaitForSingleObject(lib_lock, INFINITE);
playlist = sp_playlist_create(session, link); // <- Program crashes here
sp_playlist_add_callbacks(playlist, &playlist_callbacks, NULL);
WaitForSingleObject(lib_event_call_finished, INFINITE);
ReleaseMutex(lib_lock);
Обратный вызов является следующим:
void SP_CALLCONV playlist_state_changed(sp_playlist *playlist, void *user_data)
{
if (sp_playlist_is_loaded(playlist)) {
SetEvent(lib_event_call_finished);
}
}
lib_lock
мьютекс (CreateMutex(NULL, FALSE, NULL);
)
lib_event_call_finshed
это событие (CreateEvent(NULL, FALSE, FALSE, NULL);
)
Одно слово об архитектуре моей программы:
У меня есть поток, выполняющий вышеуказанные команды, который создается в основной функции. Затем основная функция выполняет основной цикл:
while (true) {
result = WaitForSingleObject(lib_event_notify, next_timeout);
if (result == WAIT_OBJECT_0 || result == WAIT_TIMEOUT) {
do {
sp_session_process_events(session, &next_timeout);
} while (next_timeout == 0);
} else {
ERR_MSG("WaitForSingleObject has failed");
}
}
lib_event_notify
другое событие, которое вызывается, когда notify_main_thread
называется.
Когда отмеченная строка выполняется, я получаю следующую ошибку из Visual Studio:
Unhandled exception at 0x100A5550 (libspotify.dll) in prog.exe:
0xC0000005: Access violation reading location 0x00000000.
Задача ещё не решена.