理论上,当参数是指向结构的指针时,没有什么可以阻止声明为_Inout_
具有限定符的参数。const
例如,调用中的参数D3DKMTEnumAdapters2
是指向D3DKMT_ENUMADAPTERS2
结构的指针,其定义如下:
typedef struct _D3DKMT_ENUMADAPTERS2 {
ULONG NumAdapters;
D3DKMT_ADAPTERINFO *pAdapters;
} D3DKMT_ENUMADAPTERS2;
现在,如果pAdapters
成员是一个预先分配的D3DKMT_ADAPTERINFO
对象数组(成员中指定的大小NumAdapters
),并且所有函数所做的只是用每个适配器的相关信息填充该数据数组,那么传递的结构本身就不会被修改 - 因此与const
参数上的限定符没有冲突。
但是,从 的文档D3DKMTEnumAdapters2
NumAdapers
来看,成员本身似乎也发生了变化(可能):
当 D3DKMT_ENUMADAPTERS2::pAdapters 为空时,D3DKMT_ENUMADAPTERS2::NumAdapters 设置为支持的最大适配器计数。被调用者通常会首先调用该方法来检索最大支持的适配器计数。
因此,根据该段,当使用传递(指向)结构的成员的值const
调用函数时,将违反该属性。NULL
pAdapters
请注意,链接的文档还暗示该NumAdapters
成员已被修改,即使pAdapters
给出了非空值(强调我的):
调用者传入数组大小和空数组空间。被调用者验证数组中有足够的空间,填写数组,并传回数组的使用量。