在某些Windows API调用中,我得到:cannot convert argument 6 from 'size_t *' to 'SIZE_T *'
。
This answer告诉我SIZE_T
和std::size_t
是不同的类型。我知道两者都描述了同样的事情,只是通过不同的SDK(C编译器与Windows SDK),所以我想要投射
reinterpret_cast<SIZE_T *>(&my_size_t_var)`
是否有一种不那么丑陋的方式呢?
编辑: SIZE_T
(至少在编译64位目标时):
typedef ULONG_PTR SIZE_T, *PSIZE_T;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
Edit2:我正在使用Win32压缩API,特别是Compress
,其参数为_In_ SIZE_T UncompressedDataSize
,我想用一些std::vector<byte>.size()
来调用它。
答案 0 :(得分:2)
我会这样做:
static_assert(sizeof(size_t) == sizeof(SIZE_T), "Expect size_t to be same size as SIZE_T");
靠近reinterpret_cast<SIZE_T*>(&my_size_t_var)
的地方。
这将确保它们的大小兼容,这是关键点。
答案 1 :(得分:0)
它们在x86-64上是相同的类型,但在x86(32位)上它们不是。 x86上的SIZE_T
为unsigned long
且size_t
为unsigned int
,因此您必须使用reinterpret_cast
或C风格广告:(SIZE_T*)&my_size_t_var
。
或者,您可以切换到x86-64。我担心这是你在这种情况下唯一的选择。