针对特定 32 位或 64 位平台的存根

Microsoft RPC 和 MIDL 3.0 及更高版本的编译器的某些功能特定于平台。

作为预防措施,MIDL 3.0 及更高版本的编译器会生成防护,以便在 C 编译阶段进行兼容性检查。 MIDL 生成两种类型的防护:一种依赖于平台的防护 (32 位与 64 位) ,以及依赖版本的防护 (功能集依赖项) 。 例如,MIDL 生成以下防护,以防止其他平台 C 编译 32 位存根:

#if !defined(__RPC_WIN32__)
#error  Invalid build platform for this stub.
#endif

依赖版本的防护由处理 IDL 文件中 () 和 /target 开关中找到的一组功能触发。 例如,如果接口仅使用 Windows 2000 或更高版本支持的功能,则 MIDL 会生成具有TARGET_IS_NT50_OR_LATER宏的防护。

在 Rpcndr.h 中定义的防护宏取决于 WINVER 的设置和_WIN32_WINNT,并由 C/C++ 编译器进行评估。

如果在 C 编译时收到一条错误消息,指示需要特定平台来运行存根,请先检查以确保未使用此平台上可用的功能。 触发特定防护的功能在防护正文中列出。 在前面的示例中,-Oicf 编译器开关触发了防护。 此类的显著功能包括 Windows 2000 及更高版本提供的 /robust 开关和 [async] 属性、 管道 类型构造函数、/Oif 编译器选项以及 [user_marshal] 和 [wire_marshal] 属性。 使用这些功能的存根不会在早期系统上运行。

如果知道目标平台对正在使用的功能是正确的,但仍会收到错误,则可能需要适当设置环境变量。

为 Windows 2000 或更高版本生成

  • 将此行添加到生成文件:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/robust

异步

async_uuid

/Oi

wire_marshal

user_marshal

封送 OLE 数据类型