hi leutz,
ich hab schwierigkeiten mit nem std::vector bei meiner DSDeviceEnum...
das problem tritt erst beim beenden des programms auf. der fehler liegt irgendwo in der clearmethode des std::vector. soviel hab ich mit dem debugger heraus gefunden...
und so sieht das ganze aus
ich hab mir um die devices zu beschreiben ne struct geschrieben. damit man die bequem auflisten kann und sowas
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
struct CESOUNDDLL SDX8Device
{
LPGUID pGuid;
std::basic_string<wchar_t> strName;
std::basic_string<wchar_t> strDriver;
};// SDX8Device
|
dann ruf ich die enum funktion auf
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
EResult CE::Sound::DX8Settings::EnumDevices(void)
{
HRESULT r;
// clear old list
_vDevices.clear();
// do enumeration
if(FAILED(r = DirectSoundEnumerateW(
reinterpret_cast<LPDSENUMCALLBACKW>(CE::Sound::DX8Settings::EnumDeviceCallback), NULL)))
{
CE_LOG_MESSAGE(L"Error enumerating direct sound 8 devices!", CE_LOG_ERROR);
CE_LOG_MESSAGE(CE_DXERRDESC(r), CE_LOG_NONE);
return CE_FAIL;
}
return CE_OK;
}// EnumDevices
|
die callback sieht so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
BOOL CALLBACK CE::Sound::DX8Settings::EnumDeviceCallback(LPGUID pGuid, LPWSTR wsName, LPWSTR wsDriver, LPVOID pData)
{
// fill structure
CE::Sound::SDX8Device sDevice;
sDevice.pGuid = pGuid;
sDevice.strName = wsName;
sDevice.strDriver = wsDriver;
// add to list
// ich weiß ich hätte das auch in einem machen können,
// aber das ist nur zum debuggen grad so
std::vector<CE::Sound::SDX8Device> &vDevices = CE::Sound::DX8Settings::GetInstancePtr()->_vDevices;
vDevices.push_back(sDevice);
// keep enumerating
return TRUE;
}// EnumDeviceCallback
|
und fehler tritt dann bei folgendem code auf:
|
C-/C++-Quelltext
|
1
|
_vDevices.clear();
|
der fehler der auftritt ist
der hier
ich bin echt ratlos, weil ich einfach nicht weiß, was ich falsch mache. wahrscheinlich was total simples und bescheurtes, aber ich finds einfach nicht.... freue mich auf eure antworten
gruß lemming
edit: ich weiß es is "nur" nen assert fail, aber auch die muss man ja los werden....