Эта часть относится ко всем типам параметров - большинство библиотечных интерфейсов стараются быть совместимыми с C, поэтому чаще передают параметры по указателю, а не по ссылке.
IN: Когда параметр указан как IN, интерфейс предоставляет гарантию, что он не будет изменять этот параметр. На мой взгляд, это лучше передать, отметив параметр как const
, тогда сам язык предотвратит изменение значения. Если этот параметр передается по значению, не имеет значения, помечен ли он в документации как IN (или const в прототипе), поскольку параметр в любом случае является локальным для функции. Но чтобы избежать копирования, его можно передавать по ссылке или по указателю, и в этом случае ключевое слово const
становится очень важным.
OUT: Параметр, помеченный как OUT, обычно означает, что значение параметра при его передаче в функцию не имеет значения. На самом деле, если он передается по указателю, может даже потребоваться значение NULL, и функция будет выделять память и возвращать вам значение.
IN / OUT: Параметр IN / OUT обычно указывает что-то, где значения входа и выхода имеют смысл. Например, если у вас есть библиотечная функция, которая заполняет буфер, вам может потребоваться передать указатель на буфер вместе с другим указателем, указывающим длину буфера. Когда функция возвращается, второй указатель может содержать фактическое количество байтов, записанных в буфер.