无法将参数从'SIZE_T *'转换为'size_t *' - 如何投射?

时间:2015-12-30 13:39:43

标签: c++ winapi casting size-t

在某些Windows API调用中,我得到:cannot convert argument 6 from 'size_t *' to 'SIZE_T *'

This answer告诉我SIZE_Tstd::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()来调用它。

2 个答案:

答案 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_Tunsigned longsize_tunsigned int,因此您必须使用reinterpret_cast或C风格广告:(SIZE_T*)&my_size_t_var。 或者,您可以切换到x86-64。我担心这是你在这种情况下唯一的选择。