Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

1

19.05.2006, 18:05

problem mit std::vector und DirectSoundEnumerate

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....
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

2

20.05.2006, 17:09

kann dazu denn keiner was sagen :cry: :cry: :cry:
nicht mal partick :?:
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

3

21.05.2006, 19:24

so ich hab das problem gefunden....

ich dödel hab zum auslesen dieser struktur einfach nur memcpy verwendet. dass std::basic_string das auf dauer nicht verkraftet hätte ich mir denken können...
da ich diesen teil hier nicht angegeben habe, hätte das ja auch keiner finden können.
aber ein paar spejulative tips oder so hätten mir vll schon geholfen, naja was solls

PS: das wäre eine gute gelegenheit für eine laola welle ^^
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Werbeanzeige