2011-03-07 49 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