pragma attribute

The #pragma midl_echo directive instructs MIDL to emit the specified string, without the quotation characters, into the generated header file.

#pragma midl_echo("string")
#pragma token-sequence
#pragma pack (n)
#pragma pack ( [push] [, id] [, n} )
#pragma pack ( [pop] [, id] [, n} )



Specifies a string that is inserted into the generated header file. The quotation marks are removed during the insertion process.


Specifies a sequence of tokens that are inserted into the generated header file as part of a #pragma directive without processing by the MIDL compiler.


Specifies the current pack size. Valid values are 1, 2, 4, 8, and 16.


Specifies the user identifier.


C-language preprocessing directives that appear in the IDL file are processed by the C compiler's preprocessor. The #define directives in the IDL file are available during MIDL compilation, although not to the C compiler.

For example, when the preprocessor encounters the directive "#define WINDOWS 4", the preprocessor replaces all occurrences of "WINDOWS" in the IDL file with "4". The symbol "WINDOWS" is not available at C-compile time.

To allow the C-preprocessor macro definitions to pass through the MIDL compiler to the C compiler, use the #pragma midl_echo or cpp_quote directive. These directives instruct the MIDL compiler to generate a header file that contains the parameter string with the quotation marks removed. The #pragma midl_echo and cpp_quote directives are equivalent.

The #pragma pack directive is used by the MIDL compiler to control the packing of structures. It overrides the /Zp command-line switch. The pack (n) option sets the current pack size to a specific value: 1, 2, 4, 8, or 16. The pack (push) and pack (pop) options have the following characteristics:

  • The compiler maintains a packing stack. The elements of the packing stack include a pack size and an optional id. The stack is limited only by available memory with the current pack size at the top of the stack.
  • Pack (push) results in the current pack size pushed onto the packing stack. The stack is limited by available memory.
  • Pack (push,n) is the same as pack (push) followed by pack (n).
  • Pack (push, id) also pushes id onto the packing stack along with the pack size.
  • Pack (push, id, n) is the same as pack (push, id) followed by pack (n).
  • Pack (pop) results in popping the packing stack. Unbalanced pops cause warnings and set the current pack size to the command-line value.
  • If pack (pop, id, n) is specified, then n is ignored.

The MIDL compiler places the strings specified in the \cpp_quote and pragma directives in the header file in the sequence in which they are specified in the IDL file and relative to other interface components in the IDL file. The strings should usually appear in the interface-body section of the IDL file after all import operations.

The MIDL compiler does not attempt to process #pragma directives that do not start with the prefix "midl_." Other #pragma directives in the IDL file are passed into the generated header file without changes.


/* IDL file */ 
#pragma midl_echo("#define UNICODE") 
cpp_quote("#define __DELAYED_PREPROCESSING__ 1") 
#pragma hdrstop 
#pragma check_pointer(on) 
/* generated header file */ 
#define UNICODE 
#pragma hdrstop 
#pragma check_pointer(on)

See also


Interface Definition (IDL) File