pragma (attributo)
La direttiva #pragma midl_echo indica a MIDL di generare la stringa specificata, senza virgolette, nel file di intestazione generato.
#pragma midl_echo("string")
#pragma token-sequence
#pragma pack (n)
#pragma pack ( [push] [, id] [, n} )
#pragma pack ( [pop] [, id] [, n} )
-
string
-
Specifica una stringa inserita nel file di intestazione generato. Le virgolette vengono rimosse durante il processo di inserimento.
-
sequenza di token
-
Specifica una sequenza di token inseriti nel file di intestazione generato come parte di una direttiva #pragma senza elaborare dal compilatore MIDL.
-
n
-
Specifica le dimensioni correnti del pacchetto. Tra i valori validi sono compresi 1, 2, 4, 8 e 16.
-
id
-
Specifica l'identificatore utente.
Le direttive di pre-elaborazione del linguaggio C visualizzate nel file IDL vengono elaborate dal preprocessore del compilatore C. Le direttive #define nel file IDL sono disponibili durante la compilazione MIDL, anche se non al compilatore C.
Ad esempio, quando il preprocessore rileva la direttiva "#define WINDOWS 4", il preprocessore sostituisce tutte le occorrenze di "WINDOWS" nel file IDL con "4". Il simbolo "WINDOWS" non è disponibile in fase di compilazione C.
Per consentire alle definizioni di macro del preprocessore C di passare il compilatore MIDL al compilatore C, usare la direttiva #pragma midl_echo o cpp_quote . Queste direttive indicano al compilatore MIDL di generare un file di intestazione contenente la stringa di parametro con le virgolette rimosse. Le direttive #pragma midl_echo e cpp_quote sono equivalenti.
La direttiva #pragma pack viene usata dal compilatore MIDL per controllare la compressione delle strutture. Esegue l'override dell'opzione della riga di comando /Zp . L'opzione pack (n) imposta le dimensioni correnti del pacchetto su un valore specifico: 1, 2, 4, 8 o 16. Le opzioni pack (push) e pack (pop) hanno le caratteristiche seguenti:
- Il compilatore gestisce uno stack di pacchetti. Gli elementi dello stack di imballaggio includono una dimensione del pacchetto e un ID facoltativo. Lo stack è limitato solo dalla memoria disponibile con le dimensioni correnti del pacchetto nella parte superiore dello stack.
- Il pacchetto (push) comporta il push delle dimensioni correnti del pacchetto nello stack di imballaggio. Lo stack è limitato dalla memoria disponibile.
- Pack (push,n) è uguale a pack (push) seguito da pack (n).
- Pack (push, id) esegue anche il push dell'ID nello stack di imballaggio insieme alle dimensioni del pacchetto.
- Pack (push, id, n) è lo stesso del pacchetto (push, id) seguito da pack (n).
- Il pacchetto (pop) comporta la comparsa dello stack di imballaggio. I popup non bilanciati causano avvisi e impostano le dimensioni del pacchetto corrente sul valore della riga di comando.
- Se il pacchetto (pop, id, n) viene specificato, n viene ignorato.
Il compilatore MIDL inserisce le stringhe specificate nelle direttive \cpp_quote e pragma nel file di intestazione nella sequenza in cui vengono specificate nel file IDL e relative ad altri componenti dell'interfaccia nel file IDL. Le stringhe devono in genere essere visualizzate nella sezione del corpo dell'interfaccia del file IDL dopo tutte le operazioni di importazione .
Il compilatore MIDL non tenta di elaborare le direttive #pragma che non iniziano con il prefisso "midl_". Altre direttive #pragma nel file IDL vengono passate al file di intestazione generato senza modifiche.
/* IDL file */
#pragma midl_echo("#define UNICODE")
cpp_quote("#define __DELAYED_PREPROCESSING__ 1")
#pragma hdrstop
#pragma check_pointer(on)
/* generated header file */
#define UNICODE
#define __DELAYED_PREPROCESSING__ 1
#pragma hdrstop
#pragma check_pointer(on)