pragma 屬性
#pragma midl_echo 指示詞會指示 MIDL 在產生的標頭檔中發出指定的字串,而不發出引號字元。
#pragma midl_echo("string")
#pragma token-sequence
#pragma pack (n)
#pragma pack ( [push] [, id] [, n} )
#pragma pack ( [pop] [, id] [, n} )
-
string
-
指定插入所產生標頭檔案的字串。 插入程式期間會移除引號。
-
token-sequence
-
指定標記序列,這些權杖會插入產生的標頭檔做為 #pragma 指示詞的一部分,而不需由 MIDL 編譯器處理。
-
n
-
指定目前的套件大小。 有效值為 1、2、4、8 和 16。
-
id
-
指定使用者識別碼。
出現在 IDL 檔案中的 C 語言前置處理指示詞是由 C 編譯器的預處理器處理。 IDL 檔案中的 #define 指示詞可在 MIDL 編譯期間使用,但不適用於 C 編譯器。
例如,當預處理器遇到 「#define WINDOWS 4」 指示詞時,預處理器會將 IDL 檔案中所有出現的 「WINDOWS」 取代為 「4」。 在 C 編譯時期無法使用符號 「WINDOWS」。
若要允許 C 預處理器巨集定義透過 MIDL 編譯器傳遞至 C 編譯器,請使用 #pragma midl_echo 或 cpp_quote 指示詞。 這些指示詞會指示 MIDL 編譯器產生標頭檔,其中包含已移除引號的參數字串。 #pragma midl_echo和cpp_quote指示詞相等。
MIDL 編譯器會使用#pragma pack指示詞來控制結構的封裝。 它會覆寫 /Zp 命令列參數。 套件 (n) 選項會將目前的套件大小設定為特定值:1、2、4、8 或 16。 套件 (推送) 和套件 (快顯) 選項具有下列特性:
- 編譯器會維護封裝堆疊。 封裝堆疊的元素包括套件大小和選擇性 識別碼。堆疊只會受限於堆疊頂端目前套件大小的可用記憶體。
- 套件 (推送) 會導致目前推送至封裝堆疊的套件大小。 堆疊受限於可用的記憶體。
- pack (push,n) 與 pack (push) 和 pack (n) 相同。
- 套件 (推送、 識別碼) 也會將 識別碼 推送至封裝堆疊以及套件大小。
- Pack (push、 id、 n) 與 pack (push 相同, 識別碼) 後面接著 pack (n) 。
- 套件 (快顯) 會導致封裝堆疊快顯。 未平衡的快顯視窗會造成警告,並將目前的套件大小設定為命令列值。
- 如果已指定 pack (pop、 id、 n) ,則會忽略 n 。
MIDL 編譯器會將 指定于 \cpp_quote 和 pragma 指示詞中的字串放在 IDL 檔案中指定的順序中,以及相對於 IDL 檔案中的其他介面元件。 所有 匯 入作業之後,字串通常應該會出現在 IDL 檔案的介面主體區段中。
MIDL 編譯器不會嘗試處理開頭為 「midl_」 前置詞 的#pragma 指示詞。IDL 檔案中的其他 #pragma 指示詞會傳遞至產生的標頭檔,而不會變更。
/* 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)