Поделиться через


Атрибут disable_consistency_check

Предписывает RPC не применять проверку согласованности корреляции.

interface interface-name
{
  return-type function-name(
        [[attribute-list,] disable_consistency_check] param-type param-name
}

Для коррелированных параметров RPC будет принудительно передавать буфер, отличный от NULL, если переменная счетчика корреляции не имеет значения NULL.

Пример

HRESULT PassString( [in] DWORD Length, [in, unique, string, 
    size_is( Length )]LPWSTR MyString );

Если MyString имеет значение NULL, RPC отклонит вызов, если параметр Length не имеет значение 0. Обратите внимание, что RPC разрешает параметру Length значение 0, а MyString не равно NULL, а RPC будет рассматривать MyString как выделение буфера длиной 0.

Комментарии

Чтобы отключить эту проверку, IDL может содержать атрибут [disable_consistency_check] для параметра, typedef или типа указателя. Это направит RPC не обеспечивать согласованность между указателем буфера и переменной корреляции для буфера, на который указывает параметр или указатель.

Чтобы отключить проверку согласованности для всей компиляции MIDL (и отключить принудительное применение проверки во всех случаях), можно использовать параметр командной строки MIDL /backward_compat maybenull_sizeis . Для этого требуется, чтобы целевой объект компиляции MIDL был по крайней мере целевым nt60.