在某些 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()
来调用它.
最佳答案
我会这样做:
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)
附近的某个地方.
这将确保它们在大小上兼容,这是关键点。
关于c++ - 无法将参数从 'SIZE_T *' 转换为 'size_t *' - 如何转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34530671/