Compartilhar via


Direcionamento de Stubs para plataformas específicas de 32 bits ou 64 bits

Alguns dos recursos do Microsoft RPC e do MIDL 3.0 e posteriores são específicos da plataforma.

Por precaução, os compiladores MIDL 3.0 e posteriores geram guardas que facilitam a verificação de compatibilidade durante a fase de compilação C. MIDL gera dois tipos de guardas: uma proteção dependente da plataforma (32 bits versus 64 bits) e um proteção dependente de versão (dependência do conjunto de recursos). Por exemplo, MIDL gera o seguinte proteção para impedir a compilação em C de um stub de 32 bits para outras plataformas:

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

A proteção dependente de versão é disparada por um conjunto de recursos encontrados nos arquivos IDL processados e pelo comutador /target. Por exemplo, se a interface usar recursos compatíveis somente no Windows 2000 ou posterior, MIDL gerará um proteção com a macro TARGET_IS_NT50_OR_LATER.

As macros de proteção, definidas em Rpcndr.h, dependem da configuração de WINVER e _WIN32_WINNT e são avaliadas pelo compilador C/C++.

Se, no momento da compilação C, você receber uma mensagem de erro indicando que precisa de uma plataforma específica para executar um stub, primeiro verifique se você não usou um recurso que não está disponível nesta plataforma. Os recursos que disparam um guarda específico são listados no corpo do guarda. No exemplo anterior, o comutador do compilador -Oicf disparou o guarda. Recursos notáveis desse tipo incluem o comutador /robust e o atributo [assíncrono] disponível no Windows 2000 e posterior, o construtor de tipo pipe, a opção do compilador /Oif e os atributos [user_marshal] e [wire_marshal]. Os stubs que usam esses recursos não serão executados em sistemas anteriores.

Se você souber que sua plataforma de destino está correta para os recursos que você está usando e ainda receber um erro, talvez seja necessário definir as variáveis de ambiente adequadamente.

Para compilar para o Windows 2000 ou versões posteriores

  • Adicione esta linha ao seu makefile:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/robust

async

async_uuid

/Oi

pipe

wire_marshal

user_marshal

Marshaling de tipos de dados OLE