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} )

参数

string

指定插入到生成的头文件中的字符串。 在插入过程中,将删除引号。

token-sequence

指定一系列标记,这些标记作为 #pragma 指令的一部分插入到生成的头文件中,而无需由 MIDL 编译器进行处理。

n

指定当前包大小。 有效值为 1、2、4、8 和 16。

id

指定用户标识符。

备注

出现在 IDL 文件中的 C 语言预处理指令由 C 编译器的预处理器处理。 IDL 文件中的 #define 指令在 MIDL 编译期间可用,但不适用于 C 编译器。

例如,当预处理器遇到指令“#define WINDOWS 4”时,预处理器会将 IDL 文件中出现的所有“WINDOWS”替换为“4”。 符号“WINDOWS”在 C 编译时不可用。

若要允许 C 预处理器宏定义通过 MIDL 编译器传递到 C 编译器,请使用 #pragma midl_echocpp_quote 指令。 这些指令指示 MIDL 编译器生成包含参数字符串的头文件,并删除了引号。 #pragma midl_echocpp_quote 指令是等效的。

#pragma pack 指令由 MIDL 编译器用来控制结构的打包。 它替代 /Zp 命令行开关。 pack (n) 选项将当前包大小设置为特定值:1、2、4、8 或 16。 pack (push) 和 pack (pop) 选项具有以下特征:

  • 编译器维护打包堆栈。 包装堆栈的元素包括包大小和可选 ID。堆栈仅受堆栈顶部的当前包大小的可用内存限制。
  • 包 (推送) 会导致当前包大小推送到包装堆栈上。 堆栈受可用内存的限制。
  • pack (push,n) 与 pack (push) 后跟 pack (n) 相同。
  • 包 (推送, id) 还会将 ID 与包大小一起推送到包装堆栈上。
  • Pack (push、 idn) 与 pack (push 相同, id) 后跟 pack (n) 。
  • 打包 (弹出) 会导致弹出包装堆栈。 不均衡的弹出窗口会导致警告,并将当前包大小设置为命令行值。
  • 如果指定了 pack (pop、 idn) ,则忽略 n

MIDL 编译器将 \cpp_quotepragma 指令中指定的字符串放置在头文件中,这些字符串在 IDL 文件中指定的顺序以及相对于 IDL 文件中的其他接口组件。 所有 导入 操作后,字符串通常应出现在 IDL 文件的接口正文部分中。

MIDL 编译器不会尝试处理不以前缀“ midl_ ”开头的#pragma指令。IDL 文件中的其他 #pragma 指令将传递到生成的头文件中,而不会进行更改。

示例

/* 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