/char switch
/char 开关有助于确保 MIDL 编译器和 C 编译器对所有字符和小型类型正确运行。
midl /char { signed | unsigned | ascii7 }
-
签署
-
指定 对 char 的默认 C 编译器类型进行签名。 所有不附带符号规范的 char 都生成为无符号字符。
-
符号
-
ascii7
-
指定将所有字符值传递到生成的文件中,而不关键字 (keyword) 特定符号。 所有不附带符号规范 的小型 用法都生成为 小型。
根据定义,MIDL char 是无符号的。 “Small”定义为 char (#define small char) ,MIDL small 已签名。
当 C 编译器符号声明与该类型的 MIDL 默认值冲突时, /char 开关指示 MIDL 编译器在生成的文件中指定显式 有符号 或 无符号 声明。
请记住,MIDL 编译器将存根生成为 C 源代码,必须将其编译为客户端和服务器程序的一部分。 某些编译器在源代码中指定 char 数据的位置都使用带符号字符。 MIDL 编译器生成的存根源代码将所有 字符 数据视为 无符号字符。 如果 MIDL 编译器只是将 IDL 文件中的所有字符数据生成为存根中的 char 数据,则对 char 数据使用带符号字符的编译器将导致存根源代码中发生冲突。
/char 命令行开关的目的是解决这些潜在的冲突。 它将 IDL 文件中指定为 char 的所有数据保留为存根源代码中的 无符号 char 。 它还将 小型 数据保留为已签名数据。
下表汇总了生成的类型。
midl /char 选项 | 生成的字符类型 | 生成的小型类型 |
---|---|---|
midl /char signed | unsigned char | small |
midl /char unsigned | char | 已签名的小型 |
midl /char ascii7 | char | small |
/char signed 选项指示对 C 编译器字符和小型类型进行签名。 若要匹配 char 的 MIDL 默认值,MIDL 编译器必须将不附带符号规范的 char 的所有用法转换为 无符号字符。 不会修改 小型 类型,因为此 C 编译器默认值与 SMALL 的 MIDL 默认值匹配。
/char unsigned 选项指示 C 编译器字符类型为无符号。 MIDL 编译器将不附带符号规范的 small 的所有用法转换为 有符号的 small。
ascii7 选项指示未向 字符 类型添加任何显式符号规范。 类型 small 生成为 small。
为了避免混淆,应尽可能在 IDL 文件中对 char 和 small 类型使用显式符号规范。 请注意,DCE IDL 不支持在 IDL 文件中使用显式签名 字符 类型。 因此,使用 MIDL /osf 开关进行编译时,此功能不可用。
有关 /char 的详细信息,请参阅 small。
midl /char signed filename.idl
midl /char unsigned filename.idl
midl /char ascii7 filename.idl