Compartir a través de


Los stub de destino para plataformas específicas de 32 o 64 bits

Algunas de las características de Microsoft RPC y los compiladores MIDL 3.0 y versiones posteriores son específicas de la plataforma.

Como medida de precaución, los compiladores MIDL 3.0 y versiones posteriores generan protecciones que facilitan la comprobación de compatibilidad durante la fase de compilación de C. MIDL genera dos tipos de protecciones: una protección dependiente de la plataforma (32 bits frente a 64 bits) y una protección dependiente de la versión (dependencia del conjunto de características). Por ejemplo, MIDL genera la protección siguiente para evitar la compilación de C de un stub de 32 bits para otras plataformas:

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

La protección dependiente de la versión se desencadena mediante un conjunto de características que se encuentran en los archivos IDL procesados y por el modificador /target. Por ejemplo, si la interfaz usa características admitidas solo en Windows 2000 o posterior, MIDL genera una protección con la macro TARGET_IS_NT50_OR_LATER.

Las macros de protección, definidas en Rpcndr.h, dependen de la configuración de WINVER y _WIN32_WINNT y se evalúan mediante el compilador de C/C++.

Si, en tiempo de compilación de C, recibe un mensaje de error que indica que necesita una plataforma específica para ejecutar un stub, compruebe primero para asegurarse de que no ha usado una característica que no está disponible en esta plataforma. Las características que desencadenan una protección determinada se enumeran en el cuerpo de la protección. En el ejemplo anterior, el modificador del compilador -Oicf desencadenó la protección. Entre las características importantes de este tipo se incluyen el modificador /robust y el atributo [async] disponible en Windows 2000 y versiones posteriores, el tipo de constructor pipe, la opción del compilador /Oif y los atributos [user_marshal] y [wire_marshal]. Los stub que usan estas características no se ejecutarán en sistemas anteriores.

Si sabe que la plataforma de destino es correcta para las características que usa y sigue recibiendo un error, es posible que tenga que establecer las variables de entorno de forma adecuada.

Para compilar para Windows 2000 o versiones posteriores

  • Agregue esta línea a su archivo MAKE:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/robust

async

async_uuid

/Oi

pipe

wire_marshal

user_marshal

Serialización de los tipos de datos OLE