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

标签 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() 来调用它.

最佳答案

我会这样做:

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/

相关文章:

c - 当值溢出时,将浮点类型转换为无符号整数类型时会发生什么情况?

c++ - union 做了什么来帮助将字节数组转换为不同的类型,例如此 c++ 代码中的单词?

c++ - 为什么枚举会隐式转换为 std::string?

c++ - 用Visual Studio 11编译出来的可执行文件有什么特别之处导致无法在Windows XP上执行?

c++ - 字节冲突

.net - 我如何指定主题默认字体的粗体版本?

c++ - 这个(C/C++)程序在做什么?

c++ - 如何在 C++ 中对文本框中的值进行硬编码

windows - 使 TAB 键在 Windows 对话框中起作用

c++ - 什么是 (void*) casting?