2011-03-07 85 views
0

編譯32位時出現此錯誤。同樣的文件,沒有錯誤的64位編譯的Windows無法將參數5從'SIZE_T *'轉換爲'size_t *' - 爲什麼?

1> C:\項目\ TEST.CPP(1317):錯誤C2664: 'StringCbCopyExW':不能轉換參數,從5 'SIZE_T *' 到' size_t *'

SIZE_T和size_t都有相同的大小和符號,所以有什麼區別?爲什麼我需要在這裏演員?如果類型不同,爲什麼只在32位Windows上出錯?

+0

你能不能爲的size_t和SIZE_T在32位的Windows做的sizeof? – Michas 2011-03-07 03:00:08

回答

0

什麼SIZE_T定義爲?

它可能被定義爲 「無符號整型」,或uint32_t的用於向後comaptibility

+0

'的typedef ULONG_PTR SIZE_T,* PSIZE_T;' – John 2011-03-07 04:22:25

6

SIZE_T是從std::size_t不同。第一種是Windows頭文件中的#define類型,第二種是由C++編譯器定義的類型。他們是不同的類型。

至少在我的系統上,SIZE_TULONG_PTR一個typedef,這是一個unsigned long#define

+0

對於64位是'的typedef無符號__int64 ULONG_PTR,* PULONG_PTR;'爲32位是'的typedef _W64無符號長ULONG_PTR,* PULONG_PTR;'。無論哪種情況,這些應該是相同整數類型的別名。 – John 2011-03-07 04:20:23