pragma - атрибут
Директива #pragma midl_echo указывает MIDL выпустить указанную строку без кавычек в созданный файл заголовка.
#pragma midl_echo("string")
#pragma token-sequence
#pragma pack (n)
#pragma pack ( [push] [, id] [, n} )
#pragma pack ( [pop] [, id] [, n} )
-
строка
-
Указывает строку, которая вставляется в созданный файл заголовка. Кавычки удаляются во время вставки.
-
Последовательность токенов
-
Указывает последовательность маркеров, которые вставляются в созданный файл заголовка в составе директивы #pragma без обработки компилятором MIDL.
-
n
-
Указывает текущий размер пакета. Допустимые значения: 1, 2, 4, 8 и 16.
-
идентификатор
-
Указывает идентификатор пользователя.
Директивы предварительной обработки языка C, которые отображаются в IDL-файле, обрабатываются препроцессором компилятора C. Директивы #define в IDL-файле доступны во время компиляции MIDL, но не для компилятора C.
Например, когда препроцессор обнаруживает директиву "#define WINDOWS 4", препроцессор заменяет все вхождения "WINDOWS" в IDL-файле на "4". Символ "WINDOWS" недоступен во время компиляции C.
Чтобы разрешить определениям макросов C-preprocessor передавать компилятор MIDL в компилятор C, используйте директиву #pragma midl_echo или cpp_quote . Эти директивы указывают компилятору MIDL создать файл заголовка, содержащий строку параметра с удаленными кавычками. Директивы #pragma midl_echo и cpp_quote эквивалентны.
Директива #pragma pack используется компилятором MIDL для управления упаковкой структур. Он переопределяет параметр командной строки /Zp . Параметр pack (n) задает для текущего размера пакета определенное значение: 1, 2, 4, 8 или 16. Параметры pack (push) и pack (pop) имеют следующие характеристики.
- Компилятор поддерживает стек упаковки. Элементы стека упаковки включают размер пакета и необязательный идентификатор. Стек ограничен только доступной памятью с текущим размером пакета в верхней части стека.
- Упаковка (отправка) приводит к текущему размеру пакета, помещаемого в стек упаковки. Стек ограничен доступной памятью.
- Pack (push,n) совпадает с типом pack (push), за которым следует pack (n).
- Pack (push, id) также помещает id в стек упаковки вместе с размером пакета.
- Pack (push, id, n) совпадает с pack (push, id), за которым следует pack (n).
- Пакет (pop) приводит к появляется стек упаковки. Несбалансированные всплывающие окна вызывают предупреждения и устанавливают для текущего размера пакета значение командной строки.
- Если указан параметр pack (pop, id, n), то n игнорируется.
Компилятор MIDL помещает строки, указанные в директивах \cpp_quote и pragma , в файл заголовка в последовательности, в которой они указаны в IDL-файле, и относительно других компонентов интерфейса в IDL-файле. Строки обычно должны отображаться в разделе interface-body IDL-файла после всех операций импорта .
Компилятор MIDL не пытается обработать директивы #pragma , которые не начинаются с префикса "midl_". Другие директивы #pragma в IDL-файле передаются в созданный файл заголовка без изменений.
/* IDL file */
#pragma midl_echo("#define UNICODE")
cpp_quote("#define __DELAYED_PREPROCESSING__ 1")
#pragma hdrstop
#pragma check_pointer(on)
/* generated header file */
#define UNICODE
#define __DELAYED_PREPROCESSING__ 1
#pragma hdrstop
#pragma check_pointer(on)