Perché i puntatori nella mia dll ISAPI a 64 bit sono incasinati?
Domanda
Sto lavorando alla migrazione di una dll ISAPI a 32 bit a 64 bit. Sto usando Visual Studio 2008. Sto riscontrando problemi con il puntatore EXTENSION_CONTROL_BLOCK nella funzione HttpExtensionProc. I puntatori char all'interno della struttura EXTENSION_CONTROL_BLOCK non sono validi al momento dell'entrata nella funzione; sono etichettati con all'interno della finestra dell'orologio. Se modifico manualmente i puntatori di caratteri scambiando i primi 4 byte e gli ultimi 4 byte del puntatore, vengono visualizzati i valori corretti. Qualche idea sul perché ciò accada?
Questa è la finestra di controllo prima di modificare il puntatore, prestare attenzione a lpszQueryString:
testo del link
Questa è la finestra di controllo dopo aver modificato il puntatore, prestare attenzione a lpszQueryString:
testo del link
Soluzione
Il problema era che stavo costruendo con un allineamento a 1 byte. Ho dovuto fare questo:
#pragma pack(push, 8)
#include <httpext.h>
#pragma pack(pop)