Ресурсы, буфер обмена
Как ресурсные значения и буфер обмена переносят байты между программами, зачем нужен явный форматный договор и почему расширение разрядности не равно декодированию текста.

Назначение
Ресурсы и буфер обмена решают одну задачу: передать данные от одного исполняемого модуля другому. Физически передача происходит всегда, если получатель может прочитать байты, оставленные отправителем. Но осмысленная интерпретация этих байтов возможна только при известном формате: типе данных, способе указания длины или завершителя, кодировке и порядке байтов. Этот договор может задавать существующий протокол или API, а может оговариваться отдельно, вне самого потока данных. Не все поля обязательны для каждого формата: некоторые форматы несут длину, другие завершитель, третьи фиксируют порядок байтов заранее.
Представление данных
Кодировка текста определяет, сколько байтов занимает один символ. В UTF-16 единица кода имеет 16 бит, то есть 2 байта. Дополнительные скалярные значения требуют пары суррогатов, поэтому правило «два байта на символ» не универсально. В UTF-32 каждое скалярное значение занимает один 32-битный код, то есть 4 байта, но видимый глиф может состоять из нескольких скалярных значений. Порядок байтов little-endian описывает расположение байтов в фиксированном числовом значении, а не чтение чисел справа налево.
Пример расширения разрядности
Скалярное значение U+1F600 в UTF-16 записывается парой суррогатов D83D DE00, а в little-endian байты выглядят как 3D D8 00 DE. В UTF-32LE это 00 F6 01 00. Если расширить каждый 16-битный суррогат до 32 бит простым дополнением нулями, получится 3D D8 00 00 00 DE 00 00: два 32-битных числа со значениями суррогатов, а не одно корректное скалярное значение. Расширение разрядности само по себе не декодирует суррогатную пару.
Параметры ресурсных функций
VarRes описывается как присоединение ресурсных данных к 8-битной переменной. Var32ResUni описана как расширение двух входных байтов в четыре выходных. Var32ResByte описана как расширение одного входного байта в четыре выходных. Эти сведения о ширине не доказывают поддержку суррогатных пар, знание какой-либо ANSI-кодовой страницы или корректную обработку произвольных двоичных данных. Два байта образуют одну 16-битную единицу, а две такие единицы дают четыре байта.
Форматные идентификаторы
Буфер обмена оперирует идентификаторами форматов, которые отличают текст от графического кадра или произвольного массива байтов. Имена ресурсных типов и конвенции внешних форматов задаются своими соглашениями. Для каждого конкретного формата применимы только те правила, которые он предусматривает: указание длины, завершитель, кодировка, порядок байтов. Получатель вправе отклонить данные, не соответствующие ожидаемому формату или не поддерживаемые его реализацией.
Ограничения
Само по себе расширение байтов не устанавливает декодирование текста, не выбирает кодовую страницу и не гарантирует корректность для произвольных двоичных потоков. Форматный договор обязателен для осмысленного обмена, но его содержание зависит от выбранного формата. Универсальной области общего доступа, где любые байты автоматически интерпретируются одинаково всеми программами, не существует.