impossible de convertir le paramètre 5 de ‘SIZE_T *’ en ‘size_t *’ – pourquoi?

Je reçois cette erreur lors de la compilation pour 32 bits. Le même fichier est compilé sans erreur pour Windows 64 bits

1> c: \ project \ test.cpp (1317): erreur C2664: ‘SsortingngCbCopyExW’: impossible de convertir le paramètre 5 de ‘SIZE_T *’ en ‘size_t *’

SIZE_T et size_t ont la même taille et le même signe. Quelle est la différence? Pourquoi ai-je besoin d’un casting ici? Et si les types sont différents, pourquoi s’agit-il d’une erreur uniquement sous Windows 32 bits?

SIZE_T est différent de std::size_t . Le premier est un type #define d dans les en-têtes de Windows, le second est un type défini par votre compilateur C ++. Ils sont de types différents.

Au moins sur mon système, SIZE_T est un typedef pour ULONG_PTR , qui est un #define pour unsigned long .

en quoi consiste SIZE_T?

Il peut être défini comme “unsigned int” ou uint32_t pour la compatibilité arrière