我应该使用什么类型来定义接口中的缓冲区大小?

时间:2015-10-15 08:37:26

标签: c++ interface

我的模块将用于x86和x64环境。我有一个头文件,包括带有以下签名的导出函数。

HRESULT GetObject(DWORD key, void* pValue, MY_SIZE_T  cbSize);

我应该使用哪种类型 MY_SIZE_T

  1. 使用std::size_t描述pValue指向的对象的大小。但是std :: size_t在x86和x64平台上有所不同。我不确定接口级别是否正常。

  2. 使用具有固定宽度的DWORD。但是在x64平台上DWORD可能不够大。虽然很少有超过2 ^ 32字节的结构。

1 个答案:

答案 0 :(得分:3)

这取决于cbSize应包含的内容。如果它实际上是pValue指向的对象的大小,那么std::size_t绝对是正确的选择。

std::size_t保证存在,并保证足够大以容纳对象的大小。如果你有64位指针它将至少有64位,如果你有32位指针,它(可能)只有32位。

请注意,这里可能不关心二进制兼容性。如果你有一个32位系统和complile,你无法将它与为64位系统编译的代码链接。第三个参数的大小不同是没有问题的(如果确实如此,那么无论如何你都会遇到指针问题)。