設計遠端介面

隨著分散式元件物件模型的出現,即使您只想在進程中使用它,您的自定義介面也很重要。

MIDL 不僅僅是產生介面頭檔的方法。 這是一種遠端程式設計語言,可讓您跨計算機、進程和線程界限使用介面。 這表示您必須在這些情況下驗證 MIDL 定義介面的行為,再將程式發行給客戶。 如果您在IDL中犯了錯誤,且介面未正確遠端,可能很難補救該錯誤。 您必須使用新的 IID 來修改介面,並讓舊的介面保持回溯相容性,或者您必須同時轉換每個用戶端和每部伺服器電腦。

即使您的介面永遠不會使用跨進程,也可能使用跨線程。 不支援多個 單個線程 Apartment 的進程內伺服器,可能會發生未核取 IDL 檔案的最差問題。 未指定線程模型的伺服器會隱含單個線程。 標示為單個線程的所有專案都會強制傳送至第一個稱為 CoInitialize CoInitializeEx 的線程。 如果其他線程是啟動對象的線程,該單個線程伺服器上的所有介面都必須從遠端回到啟動線程,這可能會導致傳回REGDB_E_IIDNOTREG,以回應 QueryInterface 的呼叫 除非您絕對可以判斷介面是同一個線程,而且一律會在同一個線程上呼叫,否則您會在某個時間取得遠端。

最後,身為介面設計工具,您必須考慮用戶端應用程式如何使用您的介面。 一起判斷介面在進程和機器界限之間是否會有效率:跨介面界限的方法呼叫頻率,以及要在指定方法呼叫中傳輸的數據量。 雖然 COM 讓跨進程和跨網路呼叫對程式而言是透明的,但它無法在位址空間之間有效率地進行高頻率和高頻寬呼叫。 在某些情況下,設計介面通常只會當成同進程伺服器實作,而其他介面則更適合遠端使用。