编译器错误

在 MIDL 编译期间生成以下错误消息:

返回代码 说明
MIDL2000
必须为抽象声明符指定 /c_ext
抽象声明符表示 RPC 的 Microsoft 扩展,未在 DCE RPC 中定义。 因此,如果文件包含抽象声明符,则无法使用 /osf 开关进行编译,这会强制实施严格的 DCE 兼容性。 MIDL 版本 3.0 及更高版本使用 /c_ext 开关作为默认值; /osf 开关关闭 /c_ext 开关。 有关抽象声明符的信息,请参阅 ACF 正文
MIDL2001
数据实例化是非法的;必须使用“extern”或“static”
IDL 文件中的声明和初始化与 DCE RPC 不兼容。 此功能是 Microsoft 扩展,在 DCE 兼容性 (/osf) 模式下编译时不可用。
MIDL2002
编译器堆栈溢出
编译器在处理 IDL 文件时耗尽了堆栈空间。 当编译器处理复杂声明或表达式时,可能会出现此问题。 若要解决此问题,请简化复杂声明或表达式。
MIDL2003
定义
此错误消息可能出现在以下情况下:类型已重新定义;已重新定义过程原型;已存在同名结构或联合的成员;原型中已存在同名参数。
MIDL2004
将使用 [auto_handle] 绑定
尚未将句柄类型定义为默认句柄类型。 编译器假定自动句柄将用作指定过程的绑定句柄。
MIDL2005
内存不足
编译器在编译期间内存不足。 减小 IDL 文件的大小或复杂性,或为进程分配更多内存。
MIDL2006
递归定义
结构或联合已以递归方式定义。 当缺少嵌套结构定义中的指针规范时,可能会发生此错误。
MIDL2007
导入已忽略;文件已导入
导入 IDL 文件是一项幂等操作。 包含多次无效。 将忽略除第一个导入操作之外的所有操作。
MIDL2008
稀疏枚举需要 /c_ext 或 /ms_ext
向枚举常量赋值与 DCE RPC 不兼容。 如果要使用允许向枚举常量分配值的 MIDL 的 Microsoft 扩展,则无法使用 /osf 开关进行编译,该开关强制实施严格的 DCE 兼容性。 MIDL 版本 3.0 及更高版本使用 /c_ext/ms_ext 开关作为默认值; /osf 开关关闭这些扩展开关。
MIDL2009
未定义的符号
表达式中使用了未定义的符号。 使用未定义的枚举值时,可能会发生此错误。
MIDL2010
IDL 文件中未定义的 ACF 文件中使用的类型
正在使用未定义的类型。
MIDL2011
未解析的类型声明
尚未在 IDL 文件中的其他位置定义附加错误信息字段中报告的类型。
MIDL2012
使用宽字符常量需要 /ms_ext 或 /c_ext
宽字符常量是 DCE IDL 的 Microsoft 扩展。 若要使用 数据类型wchar_t,不能使用 /osf 开关进行编译,该开关会替代 MIDL 编译器默认开关 /ms_ext/c_ext
MIDL2013
使用宽字符串需要 /ms_ext 或 /c_ext
宽字符字符串常量是 DCE IDL 的 Microsoft 扩展。 若要使用 数据类型wchar_t,不能使用 /osf 开关进行编译,该开关会替代 MIDL 编译器默认开关 /ms_ext/c_ext
MIDL2014
wchar_t 类型的重新定义不一致
类型wchar_t已重新定义为不等效于无符号短 DOS *的类型。
MIDL2015
找不到 importlib
编译器找不到 [ importlib] 指令指定的类型库。 检查以确保库的路径和名称正确。
MIDL2016
两个库块
即使同一源文件中具有不同名称) 两个库块 (也是非法的。 将所有元素合并到单个库块中。
MIDL2017
dispinterface 语句需要 IDispatch 的定义
此错误通常发生在未导入文件 Stdole2.tlb 或 Oaidl.idl 时。
MIDL2018
访问类型库时出错
编译器找不到指定的类型库。 检查以确保已正确指定路径。
MIDL2019
访问类型信息时出错
导入的类型库已损坏、无效或仅部分构造。
MIDL2020
生成类型库时出错
无法生成类型库。 此错误的一个可能原因是指定长度超过 126 个字符的 IDL 文件的路径。 Oleaut32.dll 不支持长度超过 126 个字符的路径名称。
MIDL2021
重复 ID
应用程序使用 IDL 文件中的 id 语句为成员函数指定 DISPID。 成员函数可以是接口或调度接口的属性或方法。 此错误指示 IDL 文件为两个方法或属性指定相同的标识符号。
MIDL2022
条目属性的值非法或缺失
入口属性的参数可以是指定命名入口点的字符串,也可以是定义入口点的序号。 此参数缺失或包含无效值。
MIDL2023
错误恢复假设
MIDL 编译器在 IDL 文件中发现非法字符。
MIDL2024
错误恢复放弃
MIDL 编译器在 IDL 文件中发现非法字符。 它将忽略非法字符。
MIDL2025
语法错误
编译器在指定的行处检测到语法错误。
MIDL2026
无法从以前的语法错误中恢复;中止编译
MIDL 编译器通过添加或删除语法元素自动尝试从语法错误中恢复。 此消息指示尽管尝试了这些恢复,但编译器检测到的错误过多。 更正 () 和重新编译指定的错误。
MIDL2027
未知杂注选项
MIDL 不支持指定的 C 杂注。 从 IDL 文件中删除杂注。
MIDL2028
未实现的功能
MIDL 功能虽然是语言定义的一部分,但在 Microsoft RPC 中未实现,并且不受 MIDL 编译器支持。 例如,未实现以下语言功能:位集、管道和国际字符类型。 未实现的语言功能显示在错误消息的附加错误信息字段中。
MIDL2029
类型未实现
指定的数据类型虽然是合法的 MIDL 关键字 (keyword) ,但在 Microsoft RPC 中未实现。
MIDL2030
取消引用操作中使用的非指针
不是指针的数据类型已与指针操作相关联。 不能通过指定的非指针访问对象。
MIDL2031
表达式的除数为零
常量表达式包含除以零。
MIDL2032
表达式使用不兼容的类型
表达式中运算符的左侧和右侧的类型不兼容。
MIDL2033
非数组表达式使用索引运算符
表达式对不是数组类型的数据项使用数组索引操作。
MIDL2034
表达式左侧的计算结果不为 struct/union/enum
直接或间接引用运算符“.”或“->”已应用于不是结构、联合或枚举的数据对象。 不能使用指定的 对象获取直接或间接引用。
MIDL2035
应为常量表达式
语法中预期有一个常量表达式。 例如,数组边界需要常量表达式。 当使用变量或未定义的符号定义数组绑定时,编译器将发出此错误消息。
MIDL2036
无法在编译时计算表达式
编译器无法在编译时计算表达式。
MIDL2037
表达式未实现
与 Microsoft RPC 一起提供的编译器版本不支持早期版本的 MIDL 编译器支持的功能。 删除指定的表达式。
MIDL2038
未指定 [pointer_default] 属性,假定所有未归因指针的 [唯一]
MIDL 编译器为没有指针属性的指针提供三种不同的默认情况。 顶级指针的函数参数默认为 [ref] 指针。 结构中嵌入的指针和指向其他指针的指针 (不是顶级指针,) 默认为 [pointer_default] 属性指定的类型。 如果未提供 [pointer_default] 属性,则这些非桌面级指针默认为唯一指针。 此错误消息指示最后一种情况:未提供 [pointer_default] 属性,并且至少有一个非顶级指针将被视为唯一指针。 有关详细信息,请参阅 默认指针类型
MIDL2039
接口不符合自动化封送处理
接口不符合 OLE 自动化接口的要求。 检查以确保接口派生自 IUnknownIDispatch
MIDL2040
[out] 仅参数不能是指向打开结构的指针
[out]-only 参数已用作指向结构的指针,该结构称为开放结构,其传输范围和大小在运行时确定。 服务器存根不知道要为开放结构分配多少空间。 使用指向指向打开结构的指针的指针,并确保服务器应用程序为其分配足够的空间。
MIDL2041
[out] only 参数不能是未缩小的字符串
具有字符串属性的数组已声明为不带任何大小规范的 [out]-only 参数。 服务器存根需要大小信息来为字符串分配内存。 可以删除字符串属性并添加 [size_is] 属性,也可以将参数更改为 [in, out] 参数。
MIDL2042
[out] 参数不是指针
所有 [out] 参数必须是指针,符合 C 编程语言的按值调用约定。 [out] 方向参数指示服务器将值传输到客户端。 使用按值调用约定,仅当函数参数为指针时,服务器才能将数据传输到客户端。
MIDL2043
open 结构不能是参数
开放结构包含一个一致数组作为最后一个元素。 当结构或联合的最后一个元素是符合数组时,结构或联合将被截断。
MIDL2044
[out] 必须将上下文句柄/泛型句柄指定为指向该句柄类型的指针
具有 [out] 方向属性的上下文句柄或用户定义的句柄参数必须是指向指针的指针。
MIDL2045
上下文句柄不得派生自具有 [transmit_as] 属性的类型
上下文句柄必须作为上下文句柄类型传输。 它们不能作为其他类型传输,也不能从 [transmit_is]、[represent_as]、[wire_marshal] 或 [user_marshal] 派生。
MIDL2046
无法为远程过程指定可变数量的参数
在编译时指定可变数量的参数的远程过程调用与 DCE RPC 定义不兼容。 不能在 Microsoft RPC 中使用可变数量的参数。
MIDL2047
命名参数不能为“void”
使用名称指定基类型 void 的参数。
MIDL2048
参数派生自“coclass”或“module”
coclass 指定包含接口和 dispinterface 的顶级对象。 不能将其作为参数传递。
MIDL2049
只有第一个参数可以是绑定句柄;必须指定 /ms_ext 开关
DCE RPC 仅允许第一个参数成为绑定句柄。 使用 /osf 开关进行编译会关闭默认 的 /ms_ext 开关,该开关支持多个句柄参数,并在最左侧位置以外的处理参数。
MIDL2050
不能对参数和返回类型使用 [comm_status]
过程及其参数之一都具有 [comm_status] 属性。 [comm_status] 属性指定一次只能有一个数据对象属于 error_status_t类型。
MIDL2051
过程上的 [local] 属性需要 /ms_ext
[local] 属性是 DCE IDL 的 Microsoft 扩展。 若要在函数上使用此属性,不能使用 /osf 开关进行编译。 /osf 开关替代 MIDL 编译器默认开关 /ms_ext/c_ext
MIDL2052
属性属性只能与过程一起使用
[propget]、[propput]或 [propputref] 属性的不当使用。 检查以确保已正确拼写属性的函数名称,并且属性和函数具有相同的名称。
MIDL2053
一个过程不能有多个属性属性
最多只能为函数指定一个 [propget]、[propput]或 [propputref] 属性。
MIDL2054
过程具有操作属性的非法组合
某些属性不能与其他属性相关联。 请查看 MIDL 语言参考,了解此过程中使用的特性的确切要求和语法。
MIDL2055
从符合性数组派生的字段必须是结构的最后一个成员
结构包含一个符合性数组,该数组不是结构中的最后一个元素。 符合性数组必须显示为最后一个结构元素。
MIDL2056
重复 [case] 标签
已指定重复的事例标签。 将显示重复标签。
MIDL2057
没有为可区分联合指定的 [default] 事例
指定了一个不带默认事例的可区分联合。
MIDL2058
无法解析特性表达式
无法解析与 特性关联的表达式。 如果未定义表达式中显示的变量,则通常会发生此错误。 例如, 当变量 s 未定义且由属性 [size_is] 使用时,可能会发生错误。
MIDL2059
属性表达式必须是整型类型,不支持 64 位表达式
指定的属性变量或表达式必须是整型类型。 当属性表达式类型未解析为整数时,会发生此错误。
MIDL2060
[byte_count] 需要 /ms_ext
[byte_count] 属性是 DCE IDL 的 Microsoft 扩展。 若要使用此属性,不能使用 /osf 开关进行编译,该开关将替代 MIDL 编译器默认开关 /ms_ext/c_ext
MIDL2061
[byte_count] 只能应用于指针类型的 out 参数
[byte_count] 属性只能应用于 [out] 参数,并且所有 [out] 参数必须是指针类型。
MIDL2062
[byte_count] 不能在指向符合性数组或结构的指针上指定
[byte_count] 属性不能应用于符合的数组或结构。
MIDL2063
指定字节计数的参数不为仅 [in] 或字节计数参数不为 [out]
与 [byte_count] 关联的值必须从客户端传输到服务器;它必须是 [in] 参数。 [byte_count] 参数不需要是 [in, out] 参数。
MIDL2064
指定字节计数的参数不是整型类型
与字节计数关联的值必须是 整数类型 intsmallshortlong
MIDL2065
[byte_count] 不能在具有 size 属性的参数上指定
[byte_count] 属性不能与其他大小属性一起使用,如 [size_is] 或 [length_is]。
MIDL2066
[case] 表达式不是常量
为事例标签指定的表达式不是常量。
MIDL2067
[case] 表达式不是整型
为事例标签指定的表达式不是整数类型。
MIDL2068
在 void * 以外的类型上指定 [context_handle] 需要 /ms_ext
为了实现 DCE-RPC 兼容性,上下文句柄必须是 void 类型 *的指针。 如果希望上下文句柄与 void *以外的类型相关联,请不要使用 MIDL 编译器开关 /osf,这会替代 MIDL 编译器默认开关 /ms_ext
MIDL2069
不能使用 comm_status/fault_status中的每个参数指定多个参数
一个过程只能有一个具有 [comm_status] 属性的参数。 它最多可以有一个具有 [fault_status] 属性的参数。
MIDL2070
comm_status/fault_status 参数必须是 [out] 仅指针参数
错误代码类型 [comm_status] 和 [fault_status] 从服务器传输到客户端,因此必须指定为 [out] 参数。 由于 C 编程语言的约束,所有 [out] 参数都必须是指针。
MIDL2071
终结点语法错误
终结点语法不正确。
MIDL2072
inapplicable 属性
无法在此构造中应用指定的特性。 例如,字符串属性适用于 char 数组或 char 指针,不能应用于由两个 整数组成的结构:
typedef [string] struct moo 
{
    short x;
    short y;
};
MIDL2073
[allocate] 需要 /ms_ext
分配属性表示未定义为 DCE RPC 的一部分的 Microsoft 扩展。 若要使用此属性,不能使用 /osf 开关进行编译,该开关将替代 MIDL 编译器默认开关 /ms_ext
MIDL2074
无效 [分配] 模式
指定了 [allocate] 属性构造的无效模式。 这四种有效模式single_node、all_nodes、on_null和始终。
MIDL2075
长度属性不能与字符串属性一起应用
使用字符串属性时,生成的存根文件会调用 strlen 函数来确定字符串长度。 不要对同一变量使用 length 属性和字符串属性。
MIDL2076
[last_is] 和 [length_is] 不能同时指定
已为同一数组指定了 [last_is] 和 [length_is]。 这些属性相关如下:length = last first + 1。 由于每个值都可以派生自另一个值,因此不要同时指定这两个值。
MIDL2077
[max_is] 和 [size_is] 不能同时指定
已为同一数组指定 [ max_is] 和 [ size_is]。 这些属性相关如下:max = size + 1。 由于每个值都可以派生自另一个值,因此不要同时指定这两个值。
MIDL2078
未在使用联合时指定 [switch_is] 属性
没有为工会指定任何歧视。 [switch_is] 属性指示用于在联合字段之间进行选择的判别器。
MIDL2079
未指定 [uuid]
尚未为 接口指定 UUID。
MIDL2080
[本地] 接口上忽略了 [uuid]
在对象接口上使用 [local] 属性会导致 MIDL 编译器忽略 [uuid] 属性。 不能在 RPC 接口上使用这两个属性。
MIDL2081
长度和大小属性表达式之间的类型不匹配
长度和大小属性表达式的类型必须相同。 例如,当 [size_is] 表达式的属性变量的类型为 无符号 long 且 [length_is] 表达式的属性变量为 long 类型时,将发出此警告。
MIDL2082
[string] 属性必须指定“byte”、“char”或“wchar_t”数组或指针
字符串属性不能应用于其基类型不是 字节字符结构 (其中的成员都是 字节字符 类型)的指针或数组。
MIDL2083
[switch_is] 表达式的类型与联合的开关类型不匹配
如果未指定联合 [switch_type] ,则开关类型与 [switch_is] 字段的类型相同。
MIDL2084
[transmit_as] 不得应用于派生自上下文句柄的类型
上下文句柄不能作为其他类型传输。
MIDL2085
[transmit_as] 必须指定可传播的类型
指定的 [transmit_as] 类型派生自 Microsoft RPC 无法传输的类型,例如 voidvoid *int。使用定义的 RPC 基类型;对于 int,请添加 大小说明符(如 small、 shortlong )来限定 int
MIDL2086
[transmit_as] 和 [represent_as] 的传输类型不得为指针或派生自指针
传输的类型不能是指针或派生自指针。
MIDL2087
[transmit_as] 和 [represent_as] 的呈现类型不得派生自符合/可变数组、其指针等效项或符合/可变结构
应用 [transmit_as] 的类型不能派生自大小在运行时) 确定的数组或结构的符合性数组或结构 (。
MIDL2088
[uuid] 格式不正确
UUID 格式不符合规范。 UUID 必须是一个字符串,由 5 个十六进制数字序列组成,长度为 8、4、4、4 和 12 位。 “12345678-1234-ABCD-EF01-28A49C28F17D”是有效的 UUID。 使用函数 UuidCreate 或实用工具生成有效的 UUID。
MIDL2089
uuid 不是十六进制数
为 接口指定的 UUID 包含十六进制数表示形式的无效字符。 字符 0 到 9 以及 A 到 F 在十六进制表示形式中有效。
MIDL2090
可选参数必须晚于所需参数之后
有关参数列表排序的说明,请参阅 MIDL 语言参考中的 [可选] 。
MIDL2091
使用 [entry] 时需要 [dllname]
如果要在 DLL 中指定入口点,则还必须使用 [dllname] 属性指定该 DLL 的名称。
MIDL2092
[bindable] 在没有 [propget]、[propput]或 [propputref] 的情况下无效
[bindable] 属性仅在属性上有效,因此还必须指定属性访问或属性设置函数之一。
MIDL2093
具有 [propput] 或 [propputref] 的过程必须至少有一个参数
[propput] 或 [ propputref] 过程必须至少有一个 [in] 参数和要设置的属性;[propget] 过程必须至少具有 [outretval] 参数才能接收属性或引用。
MIDL2094
[id] 属性是必需的
由于使用了 dispinterface 语法,此成员函数需要 DISPID,您可以使用 [ id] 属性指定该 DISPID。 使用属性和方法指定 dispinterface 时,必须为每个属性和方法指定 DISPID。
MIDL2095
ACF 中指定的接口名称与 IDL 文件中指定的接口名称不匹配
在当前编译器模式下,ACF 中接口关键字 (keyword) 后的名称必须与 IDL 文件中接口关键字 (keyword) 后的名称相同。 使用 MIDL 编译器开关 /acf 进行编译时,IDL 和 ACF 文件中的接口名称可能会有所不同。
MIDL2096
重复的属性
指定了重复或冲突的属性。 当两个属性互斥时,通常会发生此错误。 例如,属性 [code] 和 [nocode] 不能同时使用。
MIDL2097
具有 [comm_status] 或 [fault_status] 属性的参数必须是指向类型error_status_t
当 [fault_status] 或 [comm_status] 用作参数属性时,参数必须是 error_status_t 类型的 [out] 参数。 如果发生服务器错误,参数将设置为错误代码。 远程调用成功完成后,该过程将设置 值。
MIDL2098
无法在 ACF 文件中指定 [local] 过程
已在 ACF 中指定了本地过程。 只能在 IDL 文件中指定本地过程。
MIDL2099
指定的类型未定义为句柄
[implicit_handle] 属性中指定的类型未定义为句柄类型。 更改类型定义或属性指定的类型名称。
MIDL2100
过程未定义
属性已应用于 ACF 中的某个过程,并且该过程未在 IDL 文件中定义。
MIDL2101
此参数在 IDL 文件中不存在
IDL 文件中的定义中不存在 ACF 中指定的参数。 ACF 中显示的所有参数、函数和类型定义都必须对应于 IDL 文件中以前定义的参数、函数和类型。
MIDL2102
不支持此数组边界构造
MIDL 目前支持以 Array[Lower .. 的形式表示数组的上限和下限。 仅当指定数组下限的常量解析为值零时,才能使用 Upper]。
MIDL2103
数组绑定规范是非法的
固定大小数组的数组边界的用户规范是非法的。 例如:
typedef short Array[-1]
MIDL2104
不支持指向符合数组或包含符合数组的数组的指针
非法的一致性数组用法。 有关控制符合数组的规则,请参阅 数组和 RPC
MIDL2105
pointee/array 不派生任何大小
指定了不带任何大小规范的符合性数组。 可以使用 [max_is] 或 [size_is] 属性指定大小。
MIDL2106
只有固定数组和 SAFEARRAY 在类型库中是合法的
您在库语句中使用了不能在类型库中使用的数组类型。
MIDL2107
SAFEARRAY 仅在库块内合法
除非生成类型库,否则 MIDL 编译器不会将 SAFEARRAY 识别为有效的数据类型。
MIDL2108
格式错误的字符常量
字符常量中不允许使用行尾字符。
MIDL2109
在注释中找到文件结尾
注释中遇到了文件结尾字符。
MIDL2110
在字符串中找到的文件结尾
字符串中遇到了文件结尾字符。
MIDL2111
标识符长度超过 31 个字符
标识符限制为 31 个字母数字字符。 长度超过 31 个字符的标识符名称将被截断。
MIDL2112
在字符串中找到行尾
字符串中遇到了行尾字符。 验证是否已包含终止字符串的双引号字符。
MIDL2113
字符串常量超过 255 个字符的限制
字符串超出了允许的最大长度(255 个字符)。
MIDL2114
标识符超过 255 个字符的限制,已被截断
标识符超出了允许的最大长度(255 个字符)。 标识符中的多余字符将被截断。
MIDL2115
常量太大
该常量太大,不能在内部表示。
MIDL2116
数值分析错误
编译器无法分析数字标识符。
MIDL2117
打开文件时出错
操作系统在尝试打开输出文件时报告了错误。 此错误可能是由文件系统名称太长或文件名重复引起的。
MIDL2118
绑定到函数时出错
MIDL2119
初始化 OLE 时出错
MIDL2120
加载库时出错
MIDL2121
[out] only 参数不得派生自顶级 [unique] 或 [ptr] 指针/数组
唯一指针不能是 [out]-only 参数。 根据定义,唯一指针可以从 NULL 更改为非 NULL。 没有有关 [out]-only 参数的信息从客户端传递到服务器。
MIDL2122
属性不适用于此不可 rpc 的联合
只有 [switch_is] 和 [switch_type] 属性应用于作为远程过程调用的一部分传输的联合。
MIDL2123
用于 size 属性的表达式不得派生自 [out]-only 参数
[out]-only 参数的值不会传输到服务器,并且不能用于确定 [in] 参数的长度或大小。
MIDL2124
用于 [in] 参数的长度属性的表达式不能派生自 [out]-only 参数
[out]-only 参数的值不会传输到服务器,并且不能用于确定 [in] 参数的长度或大小。
MIDL2125
使用“int”需要 /c_ext
MIDL 是一种强类型语言。 通过网络传输的所有参数都必须派生自 MIDL 基类型之一。 类型 int 未定义为 MIDL 的一部分。 传输的数据必须包含大小说明符: 。 未通过网络传输的数据可以包含在接口中;使用 /c_ext 开关。
MIDL2126
struct/union 字段不得为“void”
结构或联合中的字段必须声明为 MIDL 支持的特定基类型或派生自基类型的类型。 远程操作中不允许使用 Void 类型。
MIDL2127
array 元素不得为 void
数组元素不能为 void。
MIDL2128
使用类型限定符和/或修饰符需要 /c_ext
仅当指定 /c_ext 开关时,才能编译类型修饰符(如 _cdecl 和 _far)。
MIDL2129
结构/联合字段不得派生自函数
结构或联合的字段必须是 MIDL 基类型或派生自这些基类型的类型。 函数在结构或联合字段中不合法。
MIDL2130
array 元素不得为函数
数组元素不能是函数。
MIDL2131
参数不能是函数
远程过程的参数必须是指定类型的变量。 函数不能是远程过程的参数。
MIDL2132
包含位字段的结构/联合需要 /c_ext
必须指定 MIDL 编译器开关 /c_ext ,以允许结构中未在远程过程调用中传输的位字段。
MIDL2133
“int”是非 ANSI 兼容扩展的类型上的位字段规范
ANSI C 编程语言规范不允许将位字段应用于非整数类型。
MIDL2134
位字段规范只能应用于简单整型类型
ANSI C 编程语言规范不允许将位字段应用于非整数类型。
MIDL2135
结构/联合字段不得派生自handle_t或上下文句柄
不能将上下文句柄作为另一个结构的一部分传输。 它们必须作为上下文句柄传输。
MIDL2136
数组元素不得派生自handle_t或上下文句柄
不能将上下文句柄作为数组的一部分传输。
MIDL2137
此联合规范需要 /c_ext
接口定义中显示的联合必须与判别器相关联或声明为局部。 使用 /c_ext 开关(MIDL 默认值)时,可以将未通过网络传输的数据隐式声明为本地数据。 不能使用 /osf 开关编译此 IDL。
MIDL2138
派生自“int”的参数必须具有大小说明符“small”、“short”或“long”以及“int”
int 类型仅在 32 位平台上是有效的 MIDL 类型,在 16 位系统上,int 必须附带大小规范。 使用小、大小说明符之一。
MIDL2139
参数的类型不能派生自 void 或 void*
MIDL 是一种强类型语言。 通过网络传输的所有参数都必须派生自 MIDL 基类型之一。 MIDL 不支持 void 作为基类型。 必须将声明更改为有效的 MIDL 类型。
MIDL2140
不支持从包含位字段的结构/联合派生参数
DCE RPC 未将位字段定义为有效的数据类型。
MIDL2141
使用派生自包含 type-modifiers/type-qualifiers 的类型的参数需要 /c_ext
在 IDL 文件中使用 constvolatile 等关键字是 DCE RPC 的 Microsoft 扩展。 使用 /osf 开关进行编译时,这些关键字不可用,这会关闭默认 的 /c_ext 扩展开关。
MIDL2142
参数不得派生自指向函数的指针
RPC 运行时库在客户端和服务器之间传输指针及其关联的数据。 无法将指向函数的指针作为参数传输,因为该函数不能通过网络传输。
MIDL2143
参数不得派生自支持非rpc 的联合
联合必须与歧视者相关联。 使用 [switch_is] 和 [switch_type] 属性。
MIDL2144
返回类型派生自“int”。必须将大小说明符与“int”一起使用
在 16 位系统上, 类型 int 不是有效的 MIDL 类型,除非它附带大小规范。 使用小、大小说明符之一。
MIDL2145
返回类型不得派生自 void 指针
MIDL 是一种强类型语言。 通过网络传输的所有参数都必须派生自 MIDL 基类型之一。 Void 类型未定义为 MIDL 的一部分。 必须将声明更改为有效的 MIDL 类型。
MIDL2146
返回类型不得派生自包含位字段的结构/联合
DCE RPC 未将位字段定义为有效的数据类型。
MIDL2147
返回类型不得派生自支持非rpc 的联合
联合必须与歧视者相关联。 使用 [switch_is] 和 [switch_type] 属性。
MIDL2148
返回类型不得派生自指向函数的指针
RPC 运行时库在客户端和服务器之间传输指针及其关联的数据。 无法将指向函数的指针作为参数传输,因为 RPC 未定义通过网络传输关联函数的方法。
MIDL2149
不支持复合初始值设定项
DCE RPC 仅支持简单初始化。 结构或数组无法在 IDL 文件中初始化。
MIDL2150
IDL 文件中的 ACF 属性需要 /app_config 开关
Microsoft 扩展允许你在 IDL 文件中指定 ACF 属性。 使用 /app_config 开关激活此扩展。
MIDL2151
单行注释需要 /ms_ext 或 /c_ext
使用两个斜杠字符的单行注释 (//) 表示 DCE RPC 的 Microsoft 扩展。 如果使用 /osf 开关进行编译,则不能使用单行注释。
MIDL2152
[version] 格式不正确
接口标头中的接口版本号必须以 主要格式指定。minor,其中每个数字的范围为 0 到 65535。
MIDL2153
“signed”需要 /ms_ext 或 /c_ext
使用已签名关键字 (keyword) 是 DCE RPC 的 Microsoft 扩展。 如果要使用此功能,则不能使用 /osf 开关。
MIDL2154
分配类型不匹配
变量的类型与分配给变量的值的类型不匹配。
MIDL2155
声明必须采用以下形式:const <类型> \<declarator> = <initializing expression>
声明与 DCE RPC 语法不兼容。 使用 /ms_ext/c_ext MIDL 编译器模式开关。
MIDL2156
声明必须具有“const”
IDL 文件中的声明必须是使用 关键字 (keyword) 常量表达式,例如:
const short x = 2;
MIDL2157
不得在参数类型规范中定义 struct/union/enum
结构、联合或枚举类型必须在函数原型外部显式声明。
MIDL2158
[allocate] 特性必须仅应用于非 void 指针类型
[allocate] 属性设计用于基于复杂指针的数据结构。 指定 [allocate] 属性时,存根文件将遍历数据结构,以计算从指针和数据结构中所有其他指针访问的所有对象的总大小。 将类型更改为非类指针类型或删除 [allocate] 属性,并使用其他方法确定其分配大小,例如 sizeof 运算符。
MIDL2159
数组或等效指针构造不能从非封装联合派生
每个联合必须与一个判别者相关联。 不允许并集数组,因为它们不提供关联的判别。 允许结构将联合及其判别项打包在一起的结构数组,因为存根可以使用判别器来确定每个联合的大小。
MIDL2160
字段不得派生自error_status_t类型
error_status_t类型只能用作参数或返回类型。 它不能嵌入到结构或联合的 字段中。
MIDL2161
union 至少有一个不带大小写标签的臂
联合声明与联合所需的 MIDL 语法不匹配。 每个联合臂都需要一个大小写标签或选择该联合臂的默认标签。
MIDL2162
参数或返回值不得派生自应用了 [ignore] 的类型
[ignore] 属性是只能应用于字段的字段属性,例如结构和数组的字段。 [ignore] 属性指示存根不应在传输期间取消引用指针,并且当它与必须取消引用的其他属性(如 [out] 参数和函数返回值)冲突时,不允许它。
MIDL2163
指针已应用指针属性
只有一个指针属性 [ref]、[unique]或 [ptr] 可以应用于单个指针。
MIDL2164
字段/参数不得派生自通过 ref 指针递归的结构
根据定义,引用指针不能设置为 NULL。 使用引用指针定义的递归数据结构没有 NULL 元素,并且按照约定是非终止的。 使用 [unique] 指针属性允许数据结构指定 NULL 元素,或将数据结构重新定义为非递归数据结构。
MIDL2165
使用派生自 void 指针的字段需要 /c_ext
只有在使用 MIDL 默认编译器设置时,IDL 文件中才允许类型 void * 以及 DCE IDL 不支持的其他类型和类型限定符。 使用 /osf 开关会替代此默认值。 如果必须在 osf 兼容模式下编译,则需要重新定义指针类型。
MIDL2166
此属性的使用需要 /ms_ext
此语言功能是 DCE IDL 的 Microsoft 扩展。 如果在 /osf ( ) 的 osf 兼容模式下编译,则无法使用此功能。
MIDL2167
此属性仅允许与新的格式类型库一起使用
若要使用此属性,需要 Windows 2000 或更高版本随附的 Oleaut32.dll 版本。
MIDL2168
使用wchar_t需要 /ms_ext 或 /c_ext
宽字符类型表示 DCE IDL 的扩展。 指定 /osf 开关时,MIDL 编译器不接受宽字符类型。
MIDL2169
未命名的字段需要 /ms_ext 或 /c_ext
DCE IDL 不支持使用未命名的结构或嵌入在其他结构或联合中的联合。 在 DCE IDL 中,必须命名所有此类嵌入字段。 指定 /osf 开关时,MIDL 编译器不允许使用它们。
MIDL2170
未命名的字段只能从结构/联合类型派生
支持未命名字段的 DCE IDL 的 Microsoft 扩展仅适用于结构和联合。 必须为字段分配名称或重新定义字段以符合此限制。
MIDL2171
联合的字段不能派生自符合/可变数组或其指针等效项
符合数组不能单独出现在联合中,但必须附带指定数组大小的值。 不要使用数组作为联合臂,而是使用由符合数组和指定其大小的标识符组成的 结构。
MIDL2172
未指定 [pointer_default] 属性,假设接口中所有未归因指针的 [ptr]
DCE IDL 实现指定每个 IDL 文件中的所有指针都必须与指针属性相关联。 如果未将显式指针属性分配给参数或指针类型,并且 IDL 文件中未指定 [pointer_default] 属性,则完整指针属性 ptr 与指针相关联。 可以通过使用显式指针属性、指定 [pointer_default] 属性或指定 /ms_ext 开关将未归因指针的默认值更改为 [unique] 来更改指针属性。
MIDL2173
初始化表达式必须解析为常量表达式
如果将表达式用作初始值设定项,则表达式必须是常量表达式。 这适用于所有 MIDL 编译器模式。 表达式必须在编译时可解析。 指定文本常量或解析为常量而不是变量的表达式。
MIDL2174
属性表达式的类型必须为 integer、char、Boolean 或 enum
指定的类型不会解析为有效的开关类型。 使用整数、字符、 字节布尔枚举 类型,或派生自这些类型之一的类型。
MIDL2175
非法常量
指定的常量已脱离指定类型的有效范围。
MIDL2176
属性未实现;忽视
在此版本的 Microsoft RPC 中未实现指定的属性。 MIDL 编译器继续处理 IDL 文件,就像属性不存在一样。
MIDL2177
返回类型不得派生自 [ref] 指针
定义为指针类型的函数返回值必须指定为 [唯一] 或 完整 指针。 不能使用引用指针。
MIDL2178
在此模式下,属性表达式必须是变量名称或指针取消引用表达式。 必须指定 /ms_ext 开关
DCE IDL 编译器要求与 [size_is] 属性关联的大小由变量或指针变量指定。 如果要利用允许常量表达式定义 [size_is] 属性的 Microsoft 扩展,则不能使用 /osf 编译器开关。
MIDL2179
参数不得派生自递归非封装联合
联合必须包含一个判别器,因此联合不能有另一个联合作为元素。 只有当联合是包含判别对象的结构的一部分时,联合才能嵌入到另一个联合中。
MIDL2180
binding-handle 参数不能仅 [out]
由 MIDL 编译器标识为此操作的绑定句柄参数必须是 [in] 参数。 [out]-仅客户端存根上未定义参数,必须在客户端上定义绑定句柄。
MIDL2181
指向句柄的指针不能是 [unique] 或 [ptr]
不能对指向句柄的指针使用唯一和完整指针属性。 这些属性 允许 NULL 值,绑定句柄不能为 NULL。 使用 [ref] 属性从引用指针派生绑定句柄参数。
MIDL2182
不是绑定句柄的参数不得派生自 handle_t
基元句柄类型 handle_t 不是通过网络传输的有效数据类型。 将参数类型更改为 handle_t以外的类型,或删除参数。
MIDL2183
意外找到文件结尾
MIDL 编译器在能够成功解析文件的所有语法元素之前找到文件末尾。 验证文件末尾是否存在右大括号字符 (}) ,或检查语法。
MIDL2184
派生自 handle_t 的类型不得应用 [transmit_as]
基元句柄类型 handle_t 不通过网络传输。
MIDL2185
[context_handle] 不得应用于应用了 [句柄] 的类型
[context_handle] 和 [handle] 属性不能应用于同一类型。
MIDL2186
[句柄] 不得在派生自 void 或 void 的类型上指定 *
使用 [handle] 属性指定的类型可以通过网络传输,但 类型 void* 不是可传输的类型。 句柄类型必须解析为派生自可转换基类型的类型。
MIDL2187
在此模式下,参数必须具有 [in]、[out] 或 [in,out] 。 必须指定 /ms_ext 或 /c_ext
DCE IDL 编译器要求所有参数都具有显式方向参数。 若要将 Microsoft 扩展用于 DCE IDL,则不能使用 /osf 开关,该开关将替代 /ms_ext/c_ext
MIDL2188
传输类型不能派生自 [transmit_as]、[represent_as]、[wire_marshal]、[user_marshal] 的“void”
[transmit_as] 属性仅适用于指针类型。 使用 类型 void* 代替 void
MIDL2189
必须在第一个且唯一的参数规范上指定“void”
关键字 (keyword) void 错误地与其他函数参数一起显示。 若要指定不带参数的函数,关键字 (keyword) void 必须是参数列表的唯一元素,如以下示例所示:
void Moo(void)
MIDL2190
[switch_is] 必须仅在派生自非封装联合的类型上指定
错误地应用了 [switch_is] 关键字 (keyword) 。 它只能与 非封装联合类型一起使用。
MIDL2191
此版本中未实现可字符串结构
DCE IDL 允许属性 [string] 应用于其元素仅包含解析为字符或字节的字符、字节或类型的结构。 Microsoft RPC 不支持此功能。 [string] 属性不能作为一个整体应用于结构。 但是,它可以应用于每个单独的数组。
MIDL2192
switch 类型只能是整型、字符、布尔值或枚举
指定的类型不解析为有效的开关类型。 使用整数、字符、 字节布尔枚举 类型或派生自这些类型之一的类型。
MIDL2193
[句柄] 不得在派生自 handle_t 的类型上指定
一个句柄类型必须使用一个且只有一个句柄类型或属性来定义。 使用基元类型 handle_t 或属性 [handle],但不能同时使用两者。 用户定义的句柄类型必须可传输,但 handle_t 类型不会在网络上传输。
MIDL2194
派生自 handle_t 的参数不能是 [out] 参数
基元类型 handle_t 的句柄仅对在其中定义它的应用程序的一侧有意义。 handle_t类型不会在网络上传输。
MIDL2195
属性表达式派生自 [unique] 或 [ptr] 指针取消引用
尽管 [unique] 和 完整 指针属性允许指针具有 NULL 值,但定义 size 或 length 属性的表达式必须永远不会有 NULL 值。 使用指针时,MIDL 将表达式限制为 [ref] 指针。
MIDL2196
“cpp_quote”需要 /ms_ext
cpp_quote 属性是 DCE IDL 的 Microsoft 扩展。 请勿使用替代 /ms_ext 的 MIDL 编译器开关 /osf
MIDL2197
quoted uuid 需要 /ms_ext
在引号内指定 UUID 值的功能是 DCE IDL 的 Microsoft 扩展。 请勿使用替代 /ms_ext 的 MIDL 编译器开关 /osf
MIDL2198
返回类型不能从非封装联合派生
非封装联合不能用作函数返回类型。 若要返回联合类型,请将联合类型指定为 [out] 或 [in, out] 参数。
MIDL2199
返回类型无法从符合性结构派生
返回类型的大小必须是常量。 即使结构还包含其大小说明符,也不能将包含符合数组的结构指定为返回类型。 若要返回符合性结构,请将结构指定为 [out] 或 [in, out] 参数。
MIDL2200
[transmit_as] 不得应用于派生自泛型句柄的类型
在此版本中,无法在同一类型上组合 [handle] 和 [transmit_as] 属性。
MIDL2201
[句柄] 不得应用于应用了 [transmit_as] 的类型
在此版本中,无法在同一类型上组合 [handle] 和 [transmit_as] 属性。
MIDL2202
为 const 声明指定的类型无效
常量声明仅限于整数、字符、宽字符、字符串和布尔值类型。
MIDL2203
不支持 sizeof 运算符的操作数
MIDL 编译器仅支持简单类型的 sizeof 操作。 指定的操作数的计算结果不为整数类型。
MIDL2204
此名称已用作 const 标识符名称
标识符以前曾用于标识 const 声明中的常量。 更改其中一个标识符的名称,使标识符是唯一的。
MIDL2205
error_status_t 类型的重新定义不一致
类型error_status_t必须解析为无符号长类型。 不能使用其他类型定义。
MIDL2206
[case] value out of switch type
与 switch 语句事例关联的值在指定开关类型的范围内。 例如,当在短整数类型的 case 语句中使用长整数值时,会发生此错误。
MIDL2207
派生自 wchar_t 的参数需要 /ms_ext
宽字符类型 wchar_t 是 DCE IDL 的 Microsoft 扩展。 请勿使用 MIDL 编译器开关 /osf,它将替代 /ms_ext
MIDL2208
此接口只有回调
回调仅在远程过程调用的上下文中有效。 接口必须至少包含一个不包含 [callback] 属性的远程过程调用的函数原型。
MIDL2209
冗余指定的属性;忽视
已多次应用指定的属性。 将忽略同一属性的多个实例。
MIDL2210
用于隐式句柄的上下文句柄类型
使用 [context_handle] 属性定义的类型已指定为 [ implicit_handle] 属性中的句柄类型。 不能以这种方式组合属性。
MIDL2211
为 [allocate] 指定的冲突选项
为 ACF 属性 [allocate] 指定的选项表示冲突指令。 例如,指定选项all_nodes或选项single_node,但不能同时指定两者。
MIDL2212
写入文件时出错
写入文件时出错。 这种情况可能是由与磁盘空间、文件句柄、文件访问限制和硬件故障相关的错误引起的。
MIDL2213
使用 [switch_is] 类型在联合定义中找不到开关类型
联合定义不包括显式 [switch_type] 属性。 [switch_is] 属性指定的变量的类型用作开关类型。
MIDL2214
由于以前的错误,语义检查不完整
MIDL 编译器对输入文件进行两次传递, () 解析任何前向声明。 由于在第一次传递期间遇到错误,尚未执行第二次传递的检查。 文件中可能仍存在与转发声明相关的未报告错误。
MIDL2215
[callback] 过程不支持 handle 参数或返回类型
[callback] 过程发生在从客户端到服务器的调用的上下文中,并使用与原始调用相同的绑定句柄。 回调函数中不允许使用显式绑定句柄参数或返回类型。
MIDL2216
[ptr] 在此版本中不支持别名
通过多个指针或变量名称访问数据时,会出现别名。 删除别名。 有关详细信息,请参阅 唯一指针
MIDL2217
参数已定义为上下文句柄
参数以前定义为上下文句柄。
MIDL2218
[context_handle] 不得派生自 handle_t
三个句柄特征: 类型handle_t、属性 [handle] 和属性 [context_handle] 是互斥的。 一次只能将一个特征应用于类型或参数。
MIDL2219
数组大小超过 65536 字节
在某些 Microsoft 平台上,可传播的最大数据大小为 64K。 重新设计应用程序,使所有传输的数据都适合最大可传输大小。
MIDL2220
结构大小超过 65536 字节
在某些 Microsoft 平台上,可传播的最大数据大小为 64K。 重新设计应用程序,使所有传输的数据都适合最大可传输大小。
MIDL2221
非capsulated 联合的字段不能是另一个非capsulated 联合
作为远程过程调用的一部分传输的联合需要一个选择联合臂的关联数据项(即判别项)。 嵌套在其他联合中的联合不提供歧视:因此,它们无法以此形式传输。 创建由联合及其判别器组成的结构。
MIDL2222
指针属性 (应用于嵌入数组的) ;忽视
仅当数组是顶级参数时,指针属性才能应用于数组。 将忽略应用于嵌入其他数据结构中的数组的其他指针属性。
MIDL2223
[分配] 对于 [transmit_as]、[represent_as]、[wire_marshal]或 [user_marshal] 的传输或呈现类型,都是非法的
[transmit_as] 和 [allocate] 属性不能同时应用于同一类型。 [transmit_as] 属性区分呈现类型和传输的类型,而 [allocate] 属性假定呈现的类型与传输的类型相同。
MIDL2224
[switch_type] 必须在此导入模式下指定
MIDL2225
[implicit_handle] 类型未定义;假设泛型句柄
ACF 中指定的句柄类型未在 IDL 文件中定义。 MIDL 编译器假定句柄类型解析为基元句柄类型 handle_t。 如果希望句的行为类似于用户定义的句柄或泛型句柄,请将 [handle] 属性添加到类型定义。
MIDL2226
array 元素不得派生自 error_status_t
在此版本的 Microsoft RPC 中, error_status_t 类型只能显示为参数或返回类型。 它不能出现在数组中。
MIDL2227
[allocate] 在从基元/泛型/上下文句柄派生的类型上是非法的
根据设计,ACF 属性 [allocate] 不能应用于句柄类型。
MIDL2228
传输或呈现的类型不得派生自 error_status_t
在此版本的 Microsoft RPC 中, error_status_t 类型不能与 [transmit_as] 属性一起使用。
MIDL2229
联合的判别器不得派生自应用了 [ignore] 的字段
远程过程调用中使用的联合必须与选择联合臂的另一个数据项(称为判别器)相关联。 必须传输歧视者。 [ignore] 属性不能应用于联合判别器。
MIDL2230
[nocode] 忽略了服务器端,因为未指定“/server none”
当 [nocode] 属性应用于正在为其生成服务器存根文件的接口中的过程时,某些 DCE IDL 编译器会生成错误。 由于服务器必须支持所有操作,因此[nocode] 不得应用于此模式下的过程,或者必须使用 MIDL 编译器开关 /server none 显式指定不生成任何服务器例程。
MIDL2231
在非[local] 接口中没有指定的远程过程;不会生成客户端/服务器存根
提供的接口没有任何远程过程,因此将仅生成头文件。
MIDL2232
为封装联合指定的默认事例太多
封装的联合只能有一个默认值:arm。
MIDL2233
为 coclass 指定的默认接口太多
coclass 最多可以有两个 [默认] 成员,一个用于表示传出 (源) 接口或 dispinterface,一个表示传入 (接收器) 接口或 dispinterface。
MIDL2234
具有 [defaultvtable] 的项还必须具有 [source]
defaultvtable 接口为对象创建另一个源接口,该接口允许接收器通过 V 表接收事件。
MIDL2235
没有字段的联合规范是非法的
联合必须至少有一个字段。
MIDL2236
值在范围外
提供的事例值在开关类型范围外。
MIDL2237
[context_handle] 必须应用于指针类型
上下文句柄必须始终是指针类型。 DCE 指定必须将所有上下文句柄类型化为 void *
MIDL2238
返回类型不得派生自 handle_t
无法返回handle_t
MIDL2239
[句柄] 不得应用于派生自上下文句柄的类型
类型不能同时是上下文句柄和泛型句柄。
MIDL2240
从“int”派生的字段必须具有大小说明符“small”、“short”或“long”以及“int”
int 类型在 16 位系统上不可传输,因为 int 的大小在计算机之间可能不同。
MIDL2241
字段不得派生自 void 或 void *
voidvoid * 不能用作远程过程的参数类型。
MIDL2242
字段不得派生自包含位字段的结构
包含位字段的结构不能用作远程过程的参数或返回类型。
MIDL2243
字段不得派生自不可 rpc 的联合
必须将联合指定为非封装联合或封装联合才能传输。 普通 C 工会缺乏跨网络传输工会所需的歧视。
MIDL2244
字段不得派生自指向函数的指针
指向函数的指针无法传输到远程过程。 指向函数的指针指向函数代码,不能使用 RPC 通过网络传输任何函数代码。
MIDL2245
不能对参数和返回类型使用 [fault_status]
每个过程只能使用一次属性 [fault_status]。 [comm_status] 属性可以单独使用。
MIDL2246
返回类型对于 /Oi 模式而言太复杂,使用 /Os
值传递的大型返回类型只能由 /Os 优化存根处理。 此例程的存根将使用 /Os 优化生成。
MIDL2247
泛型句柄类型对于 /Oi 模式来说太大,使用 /Os
值传递的大型泛型句柄类型只能由 /Os 优化存根处理。 此例程的存根将使用 /Os 优化生成。
MIDL2248
[分配 (all_nodes) ] 对 [in,out] 参数可能会孤立原始内存
对 [inout] 参数使用 [allocate (all_nodes) ] 必须重新分配 [out] 方向的连续内存,从而孤立 [in] 参数。 不建议使用此用法。
MIDL2249
不能有 [ref] 指针作为联合臂
引用指针必须始终指向有效内存,但当 [in] 方向使用另一种类型时,具有引用指针的 [inout] 联合可能会返回引用指针。
MIDL2250
使用 /Os 的 /Oi 模式不支持返回上下文句柄
在完全解释的优化模式下,MIDL 不支持上下文句柄。 切换到混合模式优化。
MIDL2251
使用 /Os 的 /Oi 模式不支持使用额外的 [comm_status] 或 [fault_status] 参数
[comm_status] 和 [fault_status] 属性只能由 /Os 优化存根处理。 此例程的存根将使用 /Os 优化生成。
MIDL2252
使用 /Os 的 /Oi 模式不支持对 [represent_as] 或 [user_marshal] 使用未知类型
[represent_as] 属性的使用与 IDL 文件中未定义的本地类型或导入的 IDL 文件只能由 /Os 优化存根处理。 此例程的存根将使用 /Os 优化生成。
MIDL2253
使用 /Os 的 /Oi 模式的返回类型不支持具有 [transmit_as] 或 [represent_as] 的数组类型
返回应用了 [transmit_as] 或 [represent_as] 的数组只能由 /Os 优化存根处理。 此例程的存根将使用 /Os 优化生成。
MIDL2254
使用 /Os 的 /Oi 模式不支持具有 [transmit_as] 或 [represent_as] 的按值传递的数组类型
完全解释优化不支持此操作。 切换到混合模式优化。
MIDL2255
[callback] 需要 /ms_ext
[callback] 属性是 Microsoft 扩展,需要启用 /ms_ext 开关。 不要使用 /osf 进行编译,它替代 /ms_ext
MIDL2256
循环接口依赖项
此接口使用自身 (直接或间接) 作为基接口。
MIDL2257
只有 IUnknown 可用作根接口
目前,所有接口都必须具有 IUnknown 作为根接口。
MIDL2258
[IID_IS] 只能应用于指向接口的指针
[iid_is] 属性只能应用于接口指针,尽管它们可以指定为指向 IUnknown *的指针。
MIDL2259
接口只能在指针到接口构造中使用
接口名称不能用作基接口或接口指针。
MIDL2260
接口指针必须具有 UUID/IID
[iid_is] 表达式的基类型必须是 UUID/GUID/IID 类型。
MIDL2261
接口主体外部的定义和声明需要 /ms_ext
将声明和定义放在任何接口主体之外是 Microsoft 扩展,需要使用 /ms_ext 开关。
MIDL2262
一个文件中的多个接口需要 /ms_ext
在单个 idl 文件中使用多个接口是 Microsoft 扩展,在 /osf 模式下编译时不可用。
MIDL2263
仅允许 [implicit_handle]、[auto_handle] 或 [explicit_handle] 中的一个
每个接口只能有这三个属性中的一个。
MIDL2264
[implicit_handle] 引用不是句柄的类型
隐式句柄必须是其中一种句柄类型。
MIDL2265
[object] procs 只能与“/env win32”一起使用
具有 [object] 属性的接口不能用于 16 位环境。
MIDL2266
[callback] 使用 /Os 的 /Oi 不支持 -env dos/win16
16 位环境中的回调只能由 /Os 优化存根处理。 此例程的存根将使用 /Os 优化生成。
MIDL2267
使用 /Os 的 /Oi 模式不支持 float/double 作为顶级参数
float 和 double 类型只能由 /Os 优化存根作为参数进行处理。 此例程的存根将使用 /Os 优化生成。 结构、数组或联合中的 float 和 double 类型仍可使用/Os 进行处理。
MIDL2268
指向上下文句柄的指针不能用作返回值
上下文句柄必须用作直接返回值,而不是间接返回值。
MIDL2269
对象接口中的过程必须返回 HRESULT
对象接口中没有-[local] 属性的所有过程都必须返回 HRESULT/SCODE
MIDL2270
重复的 UUID
与 UUID 相同,必须是唯一的。
MIDL2271
[object] 接口必须派生自另一个 [object] 接口,例如 IUnknown
仅当使用对象接口时,才允许接口继承。
MIDL2272
(异步) 接口必须派生自另一个 (异步) 接口
对象接口(同步和异步)必须派生自 IUnknown 或其他基 OLE 接口。
MIDL2273
[IID_IS] 表达式必须是指向 IID 结构的指针
[iid_is] 表达式的基类型必须是 UUID/GUID/IID 类型。
MIDL2274
[call_as] 类型必须是 [local] 过程
[call_as] 类型的目标(如果已定义)必须应用 [ local] 。
MIDL2275
不得在对象接口中使用 undefined [call_as]
必须定义 [call_as] 类型的目标。 请确保已为调用应用程序和被调用的应用程序提供 call_as 例程。
MIDL2276
[auto_handle] 不能与 [encode] 或 [decode] 一起使用
[ encode] 和 [ decode] 属性只能与显式句柄或隐式句柄一起使用。
MIDL2277
在具有 [encode] 或 [decode] 的接口中不允许使用常规过程
包含 [encode] 或 [decode] 过程的接口不能也具有远程过程。
MIDL2278
[encode] 或 [decode] 不允许顶级一致性或差异
具有顶级一致性或差异的类型无法使用类型序列化,因为无法提供大小调整/延长。 但是,允许包含它们的结构使用类型序列化。
MIDL2279
[out] 参数可能没有“const”
由于更改了 [out] 参数,因此不得将其声明为 sa 常量。
MIDL2280
返回值可能没有“const”
由于函数返回时会设置函数值,因此不能将此值声明为常量。
MIDL2281
无效地使用“retval”属性
检查以确保未使用 [可选] 属性,并且 [retval] 参数是列表中的最后一个参数。
MIDL2282
多个调用约定非法
一个过程只能应用一个调用约定。
MIDL2283
[object] 过程上的属性非法
上述属性仅适用于没有 [object] 属性的接口中的过程。
MIDL2284
[out] 接口指针必须使用双间接
由于更改的值是指向接口的指针,因此指针上方必须有另一个间接级别才能返回它。
MIDL2285
过程在 [call_as] 中作为调用方使用了两次
为避免名称冲突,给定的 [local] 过程只能用作 [call_as] 的目标一次。
MIDL2286
[call_as] 目标必须在对象接口中具有 [local]
[call_as] 的目标必须是当前接口中定义的 [local] 过程。
MIDL2287
[code] 和 [nocode] 不能一起使用
这两个属性是相互矛盾的,不能一起使用。
MIDL2288
具有 [maybe] 或 [message] 属性的过程可能没有 [out] 参数,或者返回值的类型必须为 HRESULT 或 error_status_t
由于 [可能] 过程永远不会返回,因此无法获取返回值。
MIDL2289
必须使用指向函数的指针
尽管在 /c_ext 模式下允许使用函数类型定义,但它们只能用作指向函数的指针。 它们永远不能作为远程过程的参数或返回值传输。
MIDL2290
函数可能不会在 RPC 操作中传递
函数和函数指针不能作为远程过程的参数或返回值传递。
MIDL2291
hyper/double 不支持作为 /Oi 模式的返回值,使用 /Os
Hyper 和 double 返回值只能由 /Os 优化存根处理。 此例程的存根将使用 /Os 优化生成。
MIDL2292
#pragma 包 (不匹配 #pragma 包的流行) (推送)
#pragma 包 (推送) 和 #pragma 包 (流行) 必须出现在匹配的对中。 指定了至少一个 #pragma 包 (推送) 。
MIDL2293
可字符串结构字段必须是字节/字符/wchar_t
类型 [string] 只能应用于其字段均为字节类型的结构,或等效于字节的类型定义。
MIDL2294
[notify] 不支持使用 /Os 的 /Oi 模式
[notify] 属性只能由 /Os 优化存根处理。
MIDL2295
[object] 接口中的过程不支持 handle 参数或返回类型
句柄不能与 [ object] 接口一起使用。
MIDL2296
ANSI C 仅允许未指定最左边的数组绑定
在符合性数组中,ANSI C 仅允许未指定绑定的最左侧 (最重要的) 数组。 如果多个维度符合,则 MIDL 将尝试在其他符合维度中放置“1”。 如果其他维度是在不同的类型定义中定义的,则这是不可能的。 请尝试将所有数组维度放在数组声明中以避免这种情况。 在任何情况下,请注意编译器执行的数组索引计算;可能需要使用实际大小进行自己的计算。
MIDL2297
使用 /Os 的 /Oi 模式不支持按值联合参数
完全解释的优化不支持此操作。 切换到混合模式优化。
MIDL2298
[object] 接口上的 [version] 属性被忽略
[object] 属性标识 COM 接口。 COM 接口的接口属性列表不能包含 [ version] 属性。
MIDL2299
[size_is] 或 [max_is] 属性在固定数组上无效
固定大小的数组不能使用 size_ismax_is 属性。
MIDL2300
[encode] 或 [decode] 在 [object] 接口中无效
[object] 属性标识 COM 接口。 [encode] 和 [ decode] 属性启用序列化。 也就是说,可以为数据封送和非封送提供和控制缓冲区,但不能在 COM 接口上执行序列化。
MIDL2301
类型上的 [encode] 或 [decode] 需要 /ms_ext
序列化不是 DCE-IDL 规范的一部分。 它是一个 Microsoft 扩展,需要使用 /ms_ext 命令行开关。
MIDL2302
/env win16 或 /env dos 上不支持 int
16 位 Microsoft 平台不支持在 IDL 文件中使用 int 类型。 使用 smallshortlong 限定 int 类型。
MIDL2303
[bstring] 只能应用于指向“char”或“whchar_t”的指针
此错误已过时。 提供它只是为了向后兼容。
MIDL2304
[object] 接口中的过程的属性无效
COM 接口中的过程不允许使用指定的属性。
MIDL2305
[object] 接口上的属性无效
COM 接口中不允许使用指定的属性。
MIDL2306
对于 /Oi 模式,参数太多或堆栈太大,使用 /Os
此警告已过时。 提供它只是为了向后兼容。 它指示对远程过程的调用会导致堆栈增长超过 64 K。
MIDL2307
ACF 文件类型 typedef 上没有属性,因此没有效果
IDL 文件应包含所有没有属性的 typedef 语句。 它们不应出现在 ACF 文件中。 如果存在,则 MIDL 编译器将它们解释为冗余,并忽略它们。
MIDL2308
使用 /Os 的 /Oi 模式不支持__stdcall或__cdecl以外的调用约定
调用约定(如 __pascal__fastcall 更改堆栈的格式。 /Oi 模式仅支持__stdcall__cdecl调用约定。 如果必须使用其他调用约定,请使用 /Os 模式。
MIDL2309
接口中的委托方法太多,需要 Windows 2000 或更高版本
一个接口可以从另一个接口继承。 当它这样做时,基接口的方法被视为委托的。 派生接口不能包含 256 个以上的委托方法。
MIDL2310
/env mac 或 /env powermac 不支持自动句柄
为 PowerMac 编译 IDL 文件时,不能使用自动绑定句柄。 必须指定显式或隐式句柄。
MIDL2311
库块外部的语句在 mktyplib 兼容模式下是非法的
编译 IDL 文件时,可能需要指定 /mktyplib203 命令行开关。

注意:
Mktyplib.exe 工具已过时。 请改用 MIDL 编译器。


MIDL2312
除非使用 mktyplib 兼容模式,否则语法非法
编译 IDL 文件时,可能需要指定 /mktyplib203 命令行开关。

注意:
Mktyplib.exe 工具已过时。 请改用 MIDL 编译器。


MIDL2313
非法定义,必须在 mktyplib 兼容模式下使用 typedef
编译 IDL 文件时,可能需要指定 /mktyplib203 命令行开关。

注意:
Mktyplib.exe 工具已过时。 请改用 MIDL 编译器。


MIDL2314
忽略接口指针的显式指针属性 [ptr] [ref]
指向接口的指针不能具有 IDL 属性。
MIDL2315
/Oi 模式未为 PowerMac 实现,切换到 /Os
MIDL2316
属性中使用的非法表达式类型
指针的默认值应为常量。
MIDL2317
管道中使用的非法类型
管道仅限于基本 IDL 数据类型。 例如,不能指定数组的管道。
MIDL2318
过程使用管道,使用 /Oicf
所选模式不支持管道。 MIDL 编译器检测到接口中使用了一个或多个管道。 因此,它在 /Oicf 模式下编译 IDL 文件。
MIDL2319
过程具有一个属性,该属性需要使用 /Oif,切换模式
必须在 /Oif 模式下编译 [async] 过程。
MIDL2320
冲突的优化要求,无法优化
此错误通常指示你同时指定 了 /Os/Oi (或 /Oi) MIDL 编译器模式的变体。 这也意味着在 IDL 和 ACL 文件中指定的功能需要使用这两种模式。 必须选择一种或另一种模式进行优化。
MIDL2321
管道不能是数组元素、结构或联合的成员
管道数据类型只能是顶级参数。
MIDL2322
无效的管道用法
不能将管道与 [transmit_as]、[represent_as] 或 [user_marshal] 属性一起使用。 此外,管道不能用作返回类型。
MIDL2323
功能需要高级解释优化选项;use -Oicf
此错误指示 MIDL 编译器命令行开关(如 /robust )需要使用 /Oicf 模式。
MIDL2324
功能需要高级解释优化选项;use -Oicf
此警告指示 MIDL 编译器命令行开关(如 /robust )需要使用 /Oicf 模式。
MIDL2329
优化选项正在逐步淘汰,请使用 -Oic
/Oi1 优化模式是在 MIDL 命令行上指定的。 此模式不再受支持,应改用 /Oicf
MIDL2330
正在逐步淘汰优化选项,请使用 -Oicf
/Oi2 优化模式是在 MIDL 命令行上指定的。 此模式不再受支持,应改用 /Oicf
MIDL2331
优化选项正在逐步淘汰,请使用 -ic
i1 优化模式是在 [optimize] ACF 属性中指定的。 此模式不再受支持,应改用 icf。
示例 ACF 文件:
[optimize("i1")] roo();    //MIDL 2331
MIDL2332
优化选项正在逐步淘汰,请使用 -icf
i2 优化模式是在 [optimize] ACF 属性中指定的。 此模式不再受支持,应改用 icf。
示例 ACF 文件:
[optimize("i2")] roo();    //MIDL 2332
MIDL2333
-old 和 -new 开关已过时,请使用 -oldtlb 和 -newtlb
此消息已过时,MIDL 不再省略。
MIDL2334
非法参数值
/O 命令行开关允许的变体包括 /Os/Oi/Oic/Oicf/Oif
MIDL2335
常量中的非法表达式类型
表达式的计算结果不为常量。
MIDL2336
枚举中的非法表达式类型
枚举定义中的枚举值不会计算为整型类型。
MIDL2337
不满意的转发声明
MIDL 编译器无法解析向前声明的定义。
MIDL2338
开关是矛盾的
编译 IDL 文件时,不能同时使用 /osf/ms_ext 命令行开关。 必须选择一个或另一个。
MIDL2339
MIDL 无法为无法 rpc 的联合生成 HOOKOLE 信息
此错误已过时。 它严格是为了向后兼容而提供的。
MIDL2340
找不到联合的事例表达式
联合的每个字段都必须有一个包含常量表达式的 case 语句。
MIDL2341
[user_marshal] 和 [wire_marshal] 不支持 -Oi 和 -Oic 标志,请使用 -Os 或 -Oicf
[user_marshal] 和 [wire_marshal] 属性需要仅在 /Oicf (无代码代理中提供的特定优化功能,) 或 /Os (混合模式封送处理) 。
MIDL2342
管道不能用于数据序列化,即 [编码] 和/或 [解码]
不能将管道作为参数传递给具有 [encode] 或 [decode] 属性的过程。
MIDL2343
所有管道接口指针都必须使用单个间接
不能以这种方式使用指向指向管道接口的指针的指针。
MIDL2344
[iid_is () ] 不能与管道接口指针一起使用
此消息已过时。 编译器不再使用此消息。
MIDL2345
无效或不应用 -lcid 开关
指定的 LCID) (本地标识符无效。
MIDL2346
指定的 lcid 与以前的规范不同
/lcid 和 [lcid] 中指定的值不同。 MIDL 编译器将使用最后一个定义的编译器。
MIDL2347
不允许在库块外部使用 importlib
所有 [importlib] 语句都应出现在 [] 块中。
MIDL2348
浮点值无效
MIDL 不应发出此错误。 如果看到此错误,请向 Microsoft 报告 bug,提供重现错误所需的所有文件,包括 IDL 文件、ACF 文件、标头等。
MIDL2349
无效成员
过程不能是库的成员。
MIDL2350
可能无效的成员
要成为库的有效成员,库元素必须是模块、dispinterface、coclass、if 语句、结构、联合、枚举或向前声明。
MIDL2351
管道和接口类型不匹配
此消息已过时。
MIDL2352
字符串、可变数组、符合数组和完整指针参数在运行时可能与管道参数不兼容
将一个或多个 [in] 字符串、可变数组、一致性数组和完整指针参数以及任何 [in] 管道参数组合在一起的方法将生成仅在 Windows 计算机上的 ncacn_*ncalrpc 协议序列上运行的存根。 使用存根对 ncadg_* 协议序列进行调用或接受来自其他 OSF DCE RPC 供应商的调用可能会在运行时在服务器上产生错误。 此错误从 Windows Server 2003 开始发生。
MIDL2353
参数必须位于
异步句柄必须是 [in] 参数。
MIDL2354
[async] 对象的参数类型必须是指向接口的双指针
参数的类型必须为 IAsyncManager **。
MIDL2355
异步句柄类型不正确
句柄类型应为 IAsyncManager 或派生自 IAsyncManager 的类型
MIDL2356
“内部”开关启用不受支持的功能,请谨慎使用
避免使用此开关。
MIDL2357
异步过程不能使用自动句柄
具有 [async] 属性的过程需要显式句柄。
MIDL2358
error_status_t应同时具有 [comm_status] 和 [fault_status]
使用 IDL 属性 [可能] 或 [message] 指定了过程,但返回类型仅具有 ACF 属性 [comm_status] 或 [fault_status]。 这两个 ACF 属性都是必需的。
示例 ACF 文件:
[comm_status] roo();    //MIDL 2358
[fault_status] bar();    //MIDL 2358
[comm_status, fault_status] baz();    //OK
MIDL2359
仅允许在库块中使用此构造
模块只能在库块内出现。
MIDL2360
无效的类型重新定义
新类型在非存在的类型上以递归方式定义。
示例:
typedef roo roo[10];    //MIDL 2360
MIDL2361
具有 [vararg] 属性的过程必须具有 SAFEARRAY (VARIANT) 参数;param 顺序为 [vararg], [lcid], [retval]
具有 [vararg] 属性的过程的大多数参数必须在 SAFEARRAY (VARIANT) 参数之前出现。 SAFEARRAY (VARIANT) 参数必须存在。 如果参数列表包含具有 [ lcid] 属性的参数,则它必须遵循 SAFEARRAY (VARIANT) 参数。 如果参数列表包含具有 [retval] 属性的参数,则它必须出现在具有 [lcid] 属性的参数之后。
MIDL2363
接口中方法太多,需要 Windows 2000 或更高版本
/Oicf 模式下编译时,MIDL 编译器在接口中不允许使用超过 1024 个方法。
MIDL2364
开关正在逐步淘汰
以下开关已过时:/hookole、/env win16 和 /env
MIDL2365
无法从 IAdviseSink、IAdviseSink2 或 IAdviseSinkEx 派生
无法扩展这些接口。
MIDL2366
无法分配默认值
Visual Basic 中允许为参数分配默认值,但在 C++ 中则不允许。 如果使用 C++,则忽略默认值。
MIDL2367
不支持 DOS/Win16/MAC 的类型库生成
MIDL 不支持 16 位类型库。
MIDL2368
生成类型库时出错,忽略
生成类型库时发生非严重错误。
MIDL2369
超出 /Oi 的堆栈大小,使用 /Os
-Oi 优化模式限制为参数的 128 字节堆栈空间。 编译器已自动切换到 Os 优化模式,以绕过此限制。
若要避免此警告,请使用 -Oicf 或 -Os 优化模式。 可以在命令行上更改优化模式,方法是指定 -Oicf 或 -Os 而不是 -Oi,或者通过将 [optimize9“icf”) ] 或 optimize[ (“s”) ] 属性添加到 ACF 文件中的函数。
当按值将大型结构作为参数传递时,通常会发生此警告。 可以通过改为将指针传递到结构来减小所需的堆栈大小。
示例:
typedef struct
{
char a[127];
}
large;
//This function has a stack size of 132 (x86) or 136 (alpha) on 32-bit systems
void roo(large s, int a);    //MIDL 2360
// workaround: pass by reference
void bar (large *s, int a);
MIDL2370
使用 /robust 需要 /Oicf,切换模式
在命令行上指定 /robust 开关时,必须在 /Oicf 模式下进行编译。
MIDL2371
指定的范围不正确
[range] 属性中指定的最大值小于最小值。
示例:
void roo([range(3,2)] int a);    //MIDL 2371
MIDL2372
[async_uuid] 接口的仅限 [in] 和 [out] 参数组合无效
此类型的接口仅允许具有 [in] 或 [out] 参数的简单属性组合。
MIDL2373
/robust 不支持 DOS、Win16 和 MAC 平台
MIDL 支持 Microsoft Windows 2000 或更高版本上的 /robust 开关。
MIDL2374
将逐步取消对对象接口的 NT 3.51 样式无存根代理的支持;使用 /Oif。
此模式已过时。 使用 /Oif/Oicf
MIDL2375
[encode] 或 [decode] with /robust requires /Oicf
指定 /robust 开关时,无法执行序列化。
MIDL2377
指定的冲突属性
指定了 [context_handle_serialize] 和 [context_handle_noserialize]。
MIDL2378
[serialize],[noserialize] 可应用于 context_handles
ACF 属性 [context_handle_serialize] 或 [context_handle_noserialize] 只能应用于作为上下文句柄的类型。
示例 IDL 文件:
typedef /*[context_handle] */ void *PV;    //Note: PV is *not* a context handle.
示例 ACF 文件:
typedef [context_handle_serialize] PV;    //MIDL 2378
MIDL2379
编译器达到了格式字符串表示形式的限制。 有关建议,请参阅文档。
MIDL 编译器对格式字符串的限制为 64 KB。 当 IDL 文件包含其他 IDL 文件时,通常会发生此错误。 由所有 include 语句生成的复合 IDL 文件超出了封送处理引擎解释器的类型表示形式表的限制。 尝试在 IDL 文件中使用 import 指令而不是 include 指令。 有关详细信息,请参阅 导入系统头文件包括导入
MIDL2380
线路格式可能不正确,可能需要使用 -ms_conf_struct,请参阅文档获取建议
MIDL 编译器无法为数据生成可转换的格式。 获取此错误的一种常见方法是在复杂结构中定义 ms_conf_struct
MIDL2381
堆栈大小或大于 64 K 限制的偏移量。 有关建议,请参阅文档。
调用将生成大于 64 KB 的堆栈。 尝试在较小的块中传递数据。
MIDL2382
强制用于 64 位平台的解释器模式
64 位平台需要 /Oicf 编译模式。
MIDL2383
数组元素大小大于 64 KB 的限制。
所有数组元素的大小必须小于 64 KB。
MIDL2384
方法中只能有一个 [Icid] 参数,如果最后一个参数具有 [retval] ,则它应为最后一个或第二个。
具有 [lcid] 属性的参数必须最后出现。 唯一的例外是,同时存在具有 [retval] 属性的参数。 当两者同时出现时,参数列表中的第二个参数到最后一个参数必须具有 [ lcid] 属性。 最后一个参数必须具有 [retval] 属性。
MIDL2385
midl_pragma语法不正确
MIDL 编译器在 midl_pragma 语句中检测到未知语法错误。
MIDL2386
__int3264在 /osf 模式下不受支持
如果需要使用 __int3264,请在 /ms-ext 模式下编译。
MIDL2387
类型库中未解析的符号
编译器无法解析类型库中的正式声明或引用的类型。
MIDL2388
异步管道不能按值传递
异步管道应按引用或地址传递。
MIDL2389
解释过程的参数偏移量超过 64 KB 限制
此错误通常意味着过程的参数太多。
MIDL2390
无效的数组元素
管道不能用作数组元素。
MIDL2391
dispinterface 成员必须是方法、属性或接口
dispinterface 不能包含类型定义、结构、枚举或联合。
MIDL2392
不带 [call_as] 的 [local] 过程
具有 [local] 属性的对象过程还需要 [call_as] 属性。
MIDL2393
多维矢量,切换到 /Oicf
/Os 优化模式不支持多维非修复大小数组。 编译器已为此函数自动将优化模式切换到 /Oicf
可以通过在 MIDL 命令行上指定 /Oicf 来更改编译器模式,或者通过使用 midl_pragma 警告 (禁用来全局禁止显示此警告:2393) IDL 文件中。 可以通过向 ACF 文件中的函数添加 [optimize (“icf”) ] 属性来更改单个函数的优化模式。
以下示例演示了此警告:
void roo(long s1, [size_is(s1)] long a[][30];    //MIDL2393
void bar(long s1, long s2, [size_is(s1,s2) long **a);//MIDL2393
MIDL2395
类型或构造在库块中不受支持,因为缺少对 64 KB 多态类型的 Oleaut32.dll 支持
OLE 自动化不支持) _int3264、INT_PTR等多态类型 (。 这些类型在 32 位和 64 位平台之间具有不兼容的数据表示形式。 在 64 位平台上,远程调用将在运行时失败。

注意:
请注意,从 Windows 2000 版本开始,OLE 自动化通过在运行时转换 32 位 TLB 信息来支持 64 位 TLB 文件。 因此,MIDL 仅支持 32 位 TLB 生成。


如果 MIDL 仅用于生成头文件, 则 /notlb 开关将禁止生成 TLB 文件。

MIDL2396
正在为 64b 生成的旧解释器代码
此错误已过时。 如果看到此错误,请向 Microsoft 报告一个 bug,提供 IDL 文件、ACF 文件和完整的 MIDL 命令行。
MIDL2397
不再支持编译器开关
不再支持指定的开关。
MIDL2398
无法执行 MIDL 引擎
从 Windows 2000 版本 (MIDL 版本 5.03.279) 开始,MIDL 编译器使用两个可执行文件实现:Midl.exe (驱动程序) ,Midlc.exe (编译器引擎) 。 此错误表示 Midl.exe 无法启动 Midlc.exe。 确保 Midlc.exe 与 Midl.exe 位于同一目录中,并且版本相同。
此错误可能是由于从最新分发版复制 Midl.exe 而不是 Midlx.exe 导致的。 在命令行上运行 midl 和/或 midlc (不带任何参数)以查看可执行文件的版本号。
MIDL2399
驱动程序中的错误命令
自 Windows 2000 (MIDL 版本 5.03.279) 起,MIDL 编译器使用两个可执行文件实现:Midl.exe (驱动程序) ,Midlc.exe (编译器引擎) 。 此错误指示用于将命令从 Midl.exe 传递到 Midlc.exe 的临时文件缺失或损坏。 确保 Midlc.exe 与 Midl.exe 位于同一目录中,且版本相同。
此错误可能是由于尝试直接运行 Midlc.exe 或复制 Midl.exe 但未从最新分发 Midlc.exe 而引起的。 在命令行中运行 midl 和/或 midlc ,而不用任何参数查看可执行文件的版本号。
MIDL2400
对于 ole 自动化,可选参数应为 VARIANT 或 VARIANT *
OLE 自动化要求所有 [可选] 参数的类型为 VARIANTVARIANT*
在 OLE 自动化中,使用非 VARIANT 参数可能会导致调用在运行时失败或传递 [可选] 参数的未定义数据。
MIDL2401
[defaultvalue] 应用于非 VARIANT 和 [可选]。 请删除 [可选]
[defaultvalue] 属性表示 [可选]。 [ 可选] 属性不是必需的。
MIDL2402
[可选] 属性在库块外部不适用
[ optional] 属性隐含的功能不适用于为库块外部的接口生成的代理。
MIDL2403
[Icid] 参数的数据类型必须为长
OLE 自动化要求具有 [Icid] 属性的参数的类型必须为 long
MIDL2404
具有 [propput]、[propget] 或 [propref] 的过程在 [可选] 之后不能有多个必需参数
使用 [propput]、[propget]或 [propputref] 时,最后一个参数后面不能有多个没有 [可选] 的参数。
MIDL2405
[comm_status] 或 [fault_status] 与腌泡需要 -Oicf
旧的 -Oi 优化模式不支持具有 [ comm_status] 或 [ fault_status] 的选取 ((即使用 [ 编码] 和/或 [ 解码] ) 的过程或参数。
可以通过在 MIDL 命令行上指定 -Oicf 来全局抑制此警告,也可以通过将 [optimize (“icf:) ] 属性添加到 ACF 文件中的 函数来为单个函数禁止显示此警告。
一般情况下,建议使用 -Oicf 优化模式,胜过 -Oi 模式。
MIDL2406
midl 驱动程序和编译器版本不匹配
自 Windows 2000 (MIDL 版本 5.03.279 起,) MIDL 编译器使用两个可执行文件实现:Midl.exe (驱动程序) ,Midlc.exe (编译器引擎) 。 此错误指示 Midl.exe 的版本与 Midlc.exe 的版本不匹配。
此错误可能是由复制 Midl.exe 而不是从最新分发 Midlc.exe 引起的。 在命令行中运行 midl 和/或 midlc ,而不用任何参数查看可执行文件的版本号。
MIDL2407
未指定中间文件:使用 Midl.exe
自 Windows 2000 (MIDL 版本 5.03.279) 起,MIDL 编译器使用两个可执行文件实现:Midl.exe (驱动程序) ,Midlc.exe (编译器引擎) 。 此错误指示 Midlc.exe 是直接运行的,而不是使用 Midl.exe。
MIDL2408
处理过程中参数的问题
从 TLB 导入数据以及过程具有无效参数时,可能会出现此错误。
如果看到此错误,请向 Microsoft 报告 bug。 指定 IDL 文件、ACF 文件、TLB 文件和完整的 MIDL 命令行。
MIDL2409
处理结构中字段的问题
从 TLB 导入数据以及结构具有无效的结构或联合字段时,可能会看到此错误。
如果看到此错误,请向 Microsoft 报告 bug。 指定 IDL 文件、ACF 文件、TLB 文件和完整的 MIDL 命令行。
MIDL2410
检测到内部编译器不一致:格式字符串偏移无效。 有关详细信息,请参阅文档。
MIDL 编译器在其内部数据结构中检测到无效值。 这可能是由递归结构或编译器违反内部数据自身表示限制引起的。 若要识别和/或解决问题,请尝试简化 IDL 文件。 可以通过简化复杂的参数和递归数据结构或通过拆分 IDL 文件来减小 IDL 文件来执行此操作。 此消息可能附带诊断打印输出以及有关该问题的其他信息。
如果看到此错误,请向 Microsoft 报告 bug。 指定 IDL 文件、ACF 文件、完整的 MIDL 命令行和诊断输出(如果有)。
MIDL2411
检测到内部编译器不一致:类型偏移量无效。 有关详细信息,请参阅文档。
MIDL 编译器在其内部数据结构中检测到无效值。 这可能是由递归结构或编译器违反内部数据自身表示限制引起的。 若要识别和/或解决问题,请尝试简化 IDL 文件。 为此,可以简化复杂的参数和递归数据结构,或者通过拆分使 IDL 文件变小。 此消息可能附带诊断打印输出以及有关该问题的其他信息。
如果看到此错误,请向 Microsoft 报告 bug。 指定 IDL 文件、ACF 文件、完整的 MIDL 命令行和诊断输出(如果有)。
MIDL2412
库块外部不支持 SAFEARRAY (roo) 语法,请使用 LPSAFEARRAY 作为代理
不允许在库块外部使用显式类型的 SAFEARRAY。 请改用 LPSAFEARRAY。
以下示例演示了此错误:
void roo(SAFEARRAY(long) *a); //MIDL2412 when outside a library block
void roo(LPSAFEAEEAY a);         //OK
MIDL2413
不支持位字段
MIDL 不支持 C 样式位字段。 这适用于代理生成和 TLB 生成。
MIDL2414
使用 -OIcf 不支持具有 [decode] 的浮点或复杂返回类型
-Oicf 样式选取不支持具有浮点或结构/联合返回类型的过程。 32 位的解决方法是在使用 [encode] 和/或 [decode] ) 序列化数据 (时,使用 -Oi 优化模式。 但是,由于旧的 -Oi 样式解释器和 Pickling 支持将在 Windows 2000 发布后逐步淘汰,因此强烈建议使用指针来解决此问题。 另请注意,通常,将接口方法更改为使用 [out, ref] 指针而不是导致问题的返回值在网络上完全向后兼容,并且可以轻松地在应用层中隐藏。
可以通过在 MIDL 命令行上指定 -Oi 来全局禁止显示此警告,也可以通过将 [optimize (“i”) ] 属性添加到 ACF 文件中的函数来为单个函数取消此警告。
以下示例演示了此问题:
roo.idl:
double GetDouble();
roo.acf:
[decode] GetDouble();
解决此限制的一个选项是传递 [out] 参数来保存结果,而不是使用返回值:
roo.idl:
void GetDouble([out] double *result); //top level pointer is a [ref] pointer
roo.acf:
[decode] GetDouble();
如前所述,上述解决方案不仅适用于新接口,而且适用于旧接口。 新“out”参数的线表示形式与返回值相同, (注意 void 与新返回值) 相同。
MIDL2415
使用 [解码] 时,64 位不支持返回类型
使用 [ encode] 和/或 [ decode] ) 执行数据序列化 (时,64 位模式下不支持具有浮点或结构/联合返回类型的过程。 这与旧样式 -Oi 解释器和数据序列化程序在 64 位平台上不受支持有关。 有关详细信息,请参阅MIDL2414的说明。
以下示例演示了此错误:
roo.idl:
double GetDouble();
roo.acf:
[decode] GetDouble();
建议将以下内容作为新旧接口的解决方法。 使用 [out] 参数来保存结果,而不是使用返回值:
roo.idl:
void GetDouble([out] double *result); //top level pointer is a [ref] pointer.
roo.acf:
[decode] GetDouble();
请注意,此解决方案在线路上完全向后兼容,因为 [ref, out] 指针或双精度指针的线表示形式与 double 的表示形式相同。
MIDL2416
传输类型不能包含 [wire_marshal] 或 [user_marshal] 的完整指针
具有 [ wire_marshal] 或 [ user_marshal] 属性的类型不能包含完整的 ([ ptr]) 指针。 请改用 [ unique] 或 [ ref]。
以下示例演示了此错误:
typedef struct
{
    [ptr] long *a;    //Should use [ref] or [unique] instead
}
st1;
typedef [wire_marshal(st1)] struct
{
    long a;
}
st2:
void roo(st2 *s);    //MIDL2416
MIDL2417
传输类型必须是指针或具有 [wire_marshal] 和 [user_marshal] 的常量大小
具有 [ wire_marshal] 或 [ user_marshal] 属性的顶级类型在编译时必须具有明确定义的大小。 它们不能为或包含一致数组或大小不一的数组。
以下示例演示了此错误:
typedef struct        //Type contains variable-sized array
{
    long s;
    [size_is(s)] char a[];
}
st1;
typedef [wire_marshal(st1)] struct
{
    long a;
}
st2;
void roo(st2 *s);        //MIDL2417
MIDL2418
具有 [propget] 的过程必须至少有一个参数或返回值
具有 [propget] 属性的过程必须具有返回属性值的某种方式。 它们必须至少有一个 [out] 参数或一个返回值。
MIDL2461
[readonly] 属性在方法级别应用。
[readonly] 属性只能在参数级别应用。
MIDL2465
包含符合数组的结构必须通过引用传递
RPC 中的顶级参数在编译时必须具有定义完善的大小。 它们不能为 ,也不能包含一致数组或大小不一的数组。 此外,如果没有明确定义的大小,用户无法对类型进行编码/解码。 应用程序需要按引用传递符合性结构/符合性可变结构。
以下示例演示了此错误:
typedef struct        //Type contains variable-sized array
{
    long s;
    [size_is(s)] char a[];
}
st1;
void roo(st1 s);        //MIDL2465
 
on .acf file
typedef [encode,decode] st1; //MIDL2465
MIDL9008
内部编译器问题 <系统错误代码> - 编译器因未知原因而无法继续。 有关解决方法,请参阅文档。
编译器无法继续,错误原因未知。 十六进制错误号是系统错误标识符。 编译可能由于外部问题(例如内存不足的情况)而失败。 在这种情况下,可以在 Winerror.h 或 Ntstatus.h 中找到详细信息。
通常有两种情况会生成此错误:
  • 在检测到 IDL 文件中的错误后,MIDL 编译器无法恢复。 如果 MIDL 返回了有关 IDL 文件的任何错误消息,请尝试修复它们并重新编译。 如果没有错误消息,则编译器可能在报告错误之前失败。 在报告内部编译器错误的行上查找语法错误。
  • MIDL 编译器无法在指定的优化选项下生成正确的代码。 尝试更改编译器模式、在混合模式优化中编译 (/Os) 或删除所有优化。 或者,使用 /NO_FORMAT_OPT 标志重新编译,以禁止对过程和类型描述符进行 MIDL 的默认优化。
有时,即使 IDL 文件正确且未使用优化选项,也会发生此错误。 如果是这种情况,请尝试在报告错误的位置附近重写代码部分,方法是删除最近所做的任何修改、简化或重新排列数据类型、更改原型,或者开始注释掉 IDL 文件的某些部分以查找问题代码。
如果这些选项都无法正常工作,或者如果你认为问题可能与 Midl.exe 中的 bug 有关,请通知 Microsoft,并告知所有相关详细信息。