P
Vielen herzlichen Dank, ich habe natürlich gar nicht erst an die Möglichkeit gedacht, hier GetLastError zu verwenden (ich dachte auch, dass es bei fehlerhaftem Handle einen Absturz geben müsste). Ergebnis war jedenfalls wie von dir vermutet 1400.
Und der Grund: In Anlehung an das MSDN-Tutorial zu diesem Thema habe ich folgende Struktur definiert:
typedef struct
{
HWND hWindow; // Handle for the dialog box
HINTERNET hConnect; // Connection handle
HINTERNET hRequest; // Resource request handle
DWORD dwSize; // Size of the latest data block
DWORD dwTotalSize; // Size of the total data
LPSTR lpBuffer; // Buffer for storing read data
} REQUEST_CONTEXT;
Dadurch kann man jedem Request die Möglichkeit geben, Daten abzulegen und bekommt diese dann in jedem Aufruf der Callback-Funktion automatisch zur Verfügung gestellt. Da die Anzahl der Requests ja variabel ist, habe ich die einzelnen Instanzen der obigen Struktur in einem std::vector ablegen wollen:
// Holds instances of the context value structure
std::vector<REQUEST_CONTEXT> rcContexts;
Doch genau hier lag der Fehler, da ich innerhalb einer Schleife immer die einzelnen Anfragen über push_back() eingefügt und dann zur weiteren Verarbeitung einen Zeiger auf das letzte Element des vectors verwendet habe. Dumm nur, dass durch das push_back() im nächsten Durchlauf der alte Pointer nicht mehr gültig war, da ja durch die Größenänderung alles neu alloziert werden muss. Ich habe jetzt stattdessen eine Liste genommen und hier funktioniert dann auch alles wie erwartet
Andere Sache: Bist du dir wirklich sicher, dass das hier nichts mit Threads zu tun hat? Ich habe nämlich dieses Tutorial als Grundlage genommen und dort wird ziemlich viel über Threads gesagt und unter anderem auch eine CRITICAL_SECTION eingerichtet.