Destinazione di stub per piattaforme specifiche a 32 bit o a 64 bit

Alcune delle funzionalità di Microsoft RPC e MIDL 3.0 e versioni successive sono specifiche della piattaforma.

Per precauzione, i compilatori MIDL 3.0 e versioni successive generano protezioni che facilitano il controllo della compatibilità durante la fase di compilazione C. MIDL genera due tipi di guardie: una protezione dipendente dalla piattaforma (a 32 bit rispetto a 64 bit) e una protezione dipendente dal rilascio (dipendenza del set di funzionalità). Ad esempio, MIDL genera la protezione seguente per impedire la compilazione C di uno stub a 32 bit per altre piattaforme:

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

La protezione dipendente dal rilascio viene attivata da un set di funzionalità disponibili nei file IDL elaborati e dall'opzione /target . Ad esempio, se l'interfaccia usa funzionalità supportate solo in Windows 2000 o versioni successive, MIDL genera una protezione con la macro TARGET_IS_NT50_OR_LATER.

Le macro di protezione, definite in Rpcndr.h, dipendono dall'impostazione di WINVER e _WIN32_WINNT e vengono valutate dal compilatore C/C++.

Se, in fase di compilazione C, viene visualizzato un messaggio di errore che indica che è necessaria una piattaforma specifica per eseguire uno stub, verificare prima di tutto di non aver usato una funzionalità non disponibile in questa piattaforma. Le caratteristiche che attivano una particolare guardia sono elencate nel corpo della guardia. Nell'esempio precedente, l'opzione del compilatore -Oicf ha attivato la protezione. Le funzionalità rilevanti di questo tipo includono l'opzione /robust e l'attributo [async] disponibile in Windows 2000 e versioni successive, il costruttore del tipo pipe, l'opzione del compilatore /Oif e gli attributi [user_marshal] e [wire_marshal]. Gli stub che usano queste funzionalità non verranno eseguiti nei sistemi precedenti.

Se si sa che la piattaforma di destinazione è corretta per le funzionalità in uso e che viene comunque visualizzato un errore, potrebbe essere necessario impostare le variabili di ambiente in modo appropriato.

Per compilare per Windows 2000 o versioni successive

  • Aggiungere questa riga al makefile:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/Robusto

async

async_uuid

/Oi

Tubo

wire_marshal

user_marshal

Marshalling dei tipi di dati OLE