Прочитать на английском

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


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)

См. также раздел

cpp_quote

Файл определения интерфейса (IDL)

Импорт

/Zp