/Oi 參數
/Oi和/Oic參數會指示 MIDL 編譯器使用完全解譯的封送處理方法。 /Oicf參數提供額外的效能增強功能。
midl /{Oi | Oic | Oif | Oicf}
-
Oi
-
指定在用戶端與伺服器之間傳遞之封送處理存根程式碼的完整解譯方法。
注意
這個參數已過時。 建議將 /Oicf 參數用於其位置。
-
Oic
-
指定封送處理的無程式碼 Proxy 方法,提供 /Oi 的所有功能,並進一步減少物件介面的用戶端存根程式碼大小。
注意
這個參數已過時。 建議將 /Oicf 參數用於其位置。
-
Oif 或 Oicf
-
指定封送處理的無程式碼 Proxy 方法,其中包含 /Oi 和 /Oic 所提供的所有功能,但會使用新的解譯器 (快速格式字串,) 提供比 /Oi 或 /Oic更好的效能。 此參數包含最近的 RPC 增強功能,建議用於新式 RPC 案例。
請注意支援平臺的相關限制。
MIDL 3.0 編譯器提供兩個封送處理常式代碼的方法:完整解譯 ( /Oi、 /Oic 和 /Oicf) 和混合模式 ( /Os) 。 從 MIDL 6.0.359 版開始,MIDL 編譯器預設會產生 /Oicf /robust stub。 某些模式不支援某些語言功能。 在此情況下,編譯器會自動切換至適當的模式,併發出警告。
如果效能是考慮的,混合模式 ( /Os) 方法可能是最佳方法。 在此模式中,編譯器會選擇在產生的存根中內嵌封送處理某些參數。 雖然這會導致較大的存根大小,但可提供更高的效能。
完全解譯的方法會完全離線封送處理資料。 這會大幅減少存根程式碼的大小,但會導致效能降低。 此外,使用完全解譯的方法,每個程式都有 16 個參數的限制。 任何包含超過 16 個參數的程式都會在 /Os 模式中自動處理。 在解譯的模式中, /Oicf 提供最佳效能, 而 /Oi 提供最佳的回溯相容性。
如果您的應用程式使用 MIDL 3.0 引進的 MIDL 功能,例如 [wire_marshal] 和 [user_marshal] 屬性,您可能會想要使用/Oif選項。 如果您的應用程式使用 管道 ,您必須使用 /Oif 選項;如果您指定另一個模式,MIDL 編譯器會切換至 /Oif。
若要微調存根程式碼封送處理的方式,Microsoft RPC 會提供 ACF [optimize] 屬性。 這個屬性可用來做為介面屬性或作業屬性,以選取個別介面或個別作業的封送處理模式。
在 C 編譯期間,MIDL 編譯器在解譯方法中使用 /Oi、 /Oic或 /Oif 參數所產生的 Stub 必須編譯為 stdcall 或 cdecl 程式。 PASCAL 或 Fastcall 呼叫慣例將無法運作。 此外,伺服器存根必須編譯為 stdcall。
midl /Oi filename.idl
midl /Oic filename.idl
midl /Oif filename.idl