我的理解是,如果指针指向读写的东西,即">inout";那么根据定义;const";(因为"out"(然而,在C报头中存在将参数指定为"out"的原型inoutconst";这对我来说没有意义
EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters2(_Inout_ CONST D3DKMT_ENUMADAPTERS2*);
正如我上面提到的,我看不出这个参数怎么会是"0";const";考虑到它也是";输出";。
我是误解了什么,还是这个定义不正确?
谢谢你的帮助。
`
理论上,当声明为_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为null时,D3DKMT_ENUMADAPTERS2::NumAdapters设置为支持的最大值适配器计数。被调用者通常会首先调用该方法检索支持的最大适配器计数。
因此,根据该段落,当使用传递(指向(结构的pAdapters
成员的NULL
值调用函数时,将违反const
属性。
注意,链接文档也暗示NumAdapters
成员被修改,即使给出了非空的pAdapters
值(强调矿(:
调用方传入数组大小和空数组空间。被叫方验证数组中有足够的空间,填充数组,并返回多少使用了阵列的。