Here is C++ code written in Visual Studio 2005:
#pragma comment(lib, "bass.lib")
#pragma comment(lib, "bassmix.lib")
#include <stdio.h>
#include <windows.h>
#include <bass.h>
#include <bassmix.h>
#define I_WANT_TO_FAIL
const char *filepath = "C:\\file.mp3";
class AudioFile {
public:
AudioFile() {
BASS_Init(0, 44100, BASS_DEVICE_MONO, 0, NULL);
}
AudioFile(const char *filepath) {
#ifdef I_WANT_TO_FAIL
AudioFile();
#else
BASS_Init(0, 44100, BASS_DEVICE_MONO, 0, NULL);
#endif
HSTREAM stream = BASS_StreamCreateFile(FALSE, filepath, 0, 0, BASS_STREAM_DECODE);
if (!stream) {
printf("Error %d\n", BASS_ErrorGetCode()); // Error 8 (aka BASS_ERROR_INIT)
return;
}
printf("No errors\n");
BASS_StreamFree(stream);
}
~AudioFile() {
BASS_Free();
}
};
int main() {
AudioFile file(filepath);
system("pause");
return 0;
}
It's a simplified version of a class that only loads audio file into RAM (but doesn't play it).
If macro I_WANT_TO_FAIL is defined, then BASS_StreamCreateFile() fails, if not - everything's fine. Also, if macro is defined, BASS_GetDevice() returns 0 while in AudioFile() and -1 while in AudioFile(const chat*). Is it a bug? Am I doing something wrong?