无法将参数从 '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_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()
.
它们在 x86-64 上是相同的类型,但在 x86(32 位)上它们不是。 SIZE_T
在 x86 上是 unsigned long
而 size_t
是 unsigned 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)
附近的某个地方。
这将确保它们在尺寸上兼容,这是关键点。
在某些 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()
.
它们在 x86-64 上是相同的类型,但在 x86(32 位)上它们不是。 SIZE_T
在 x86 上是 unsigned long
而 size_t
是 unsigned 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)
附近的某个地方。
这将确保它们在尺寸上兼容,这是关键点。