我的模块将用于x86和x64环境。我有一个头文件,包括带有以下签名的导出函数。
HRESULT GetObject(DWORD key, void* pValue, MY_SIZE_T cbSize);
我应该使用哪种类型 MY_SIZE_T 。
使用std::size_t
描述pValue指向的对象的大小。但是std :: size_t在x86和x64平台上有所不同。我不确定接口级别是否正常。
使用具有固定宽度的DWORD
。但是在x64平台上DWORD可能不够大。虽然很少有超过2 ^ 32字节的结构。
答案 0 :(得分:3)
这取决于cbSize
应包含的内容。如果它实际上是pValue
指向的对象的大小,那么std::size_t
绝对是正确的选择。
std::size_t
保证存在,并保证足够大以容纳对象的大小。如果你有64位指针它将至少有64位,如果你有32位指针,它(可能)只有32位。
请注意,这里可能不关心二进制兼容性。如果你有一个32位系统和complile,你无法将它与为64位系统编译的代码链接。第三个参数的大小不同是没有问题的(如果确实如此,那么无论如何你都会遇到指针问题)。