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

cannot convert parameter from 'SIZE_T *' to 'size_t *' - how to cast?

在某些 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().

它们在 x86-64 上是相同的类型,但在 x86(32 位)上它们不是。 SIZE_T 在 x86 上是 unsigned longsize_tunsigned int 所以你必须使用 reinterpret_cast 或 C-style 转换:(SIZE_T*)&my_size_t_var。 或者,您可以切换到 x86-64。恐怕这些是您在这种情况下唯一的选择。

我会这样做:

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) 附近的某个地方。

这将确保它们在尺寸上兼容,这是关键点。