共用方式為


MIDL 的 C 預處理器需求

此頁面僅適用于有特定原因的開發人員,以取代 Microsoft C/C++ 預處理器做為 MIDL 使用的預處理器,或必須指定自訂預處理器參數的開發人員。 MIDL 參數 /cpp_cmd/cpp_opt/no_cpp 可用來覆寫編譯器的預設行為。 通常沒有理由取代 Microsoft C/C++ 預處理器,也不需要指定自訂的預處理器參數。

MIDL 編譯器會在 IDL 檔案的初始處理期間使用 C 預處理器。 編譯 IDL 檔案時所使用的建置環境會與預設 C/C++ 預處理器相關聯。 如果要使用不同的預處理器,MIDL 編譯器參數 /cpp_cmd 會啟用預設 C/C++-預處理器名稱的覆寫:

midl /cpp_cmd preprocessor_name filename

preprocessor_name

指定 MIDL 要使用的預處理器名稱。 可以使用二進位檔的路徑來指定。 .exe擴充功能是選擇性的。

檔案名

指定 IDL 檔案的名稱。

  • MIDL 編譯器預期任何預處理器都觀察下列慣例:
  • 輸入檔會指定為命令列上的最後一個引數。
  • 預處理器必須將輸出重新導向至標準輸出裝置 stdout。
  • 在預處理器的輸出資料流程中, #line 指示詞會存在,以啟用更好的診斷訊息。
  • 行指示詞是輸出資料流程中唯一的預處理器指示詞。

MIDL 假設繁衍的預處理器已從編譯器的輸入資料流程中移除所有預處理器指示詞,但編譯器訊息中找出來源位置所需的行指示詞出現次數除外。 當指出與 Microsoft C/C++ 預處理器不同的預處理器時,或使用 /cpp_opt 參數指定預處理器選項時,需要指定適當的預處理器選項,將行指示詞放在編譯器的輸入資料流程中。 例如,針對 Microsoft C/C++ 預處理器,必須使用 /E 選項:

midl /cpp_cmd cl.exe /cpp_opt "/E" file.idl

MIDL 接受#line指示詞,格式如下之一:

#line digit-sequence "filename" new-line
 
# digit-sequence "filename" new-line

如需行指示詞和其他預處理器指示詞的完整描述,請參閱所使用 C 編譯器的檔。

MIDL 只接受行預處理器指示詞。 因此,如果使用 /no_cpp 參數,則輸入檔不能有其他預處理器指示詞,或輸入檔必須在叫用 MIDL 之前處理。

如需詳細資訊,請參閱 處理 IDL 檔案中的#defines