使用陣列、字串和指標

醫生計畫 (在 Platform Software Development Kit (SDK) ) 中看到 \samples\rpc\doctor 是一個應用程式的良好範例,示範陣列和字串屬性所涉及的設計取捨。 「醫生計畫」是 1960 年代 MIT 的人工智慧研究人員在 1960 年所開發的小型已知程式 Eliza 範例版本。 程式會使用簡單的模式比對來回應自然語言輸入來模擬運算式。

Eliza 程式記錄了下列會話。

User 伊麗莎
男性全都一樣。 以何種方式?
他們一律會針對某些專案或其他專案產生錯誤。 您可以思考特定範例嗎?
好,我的朋友讓我在這裡。 您的小朋友讓您在這裡。
他說我大部分的時間都感到沮喪。 很抱歉,您感到抱歉。
正確,我很不滿意。 您認為這裡將協助您不滿意嗎?
我需要一些協助;這似乎很確定。 如果您收到一些協助,這代表什麼意思?
或許我可以學習與我的母親一起合作。 深入瞭解您的家庭。
我的母親負責我。 您家庭中的誰會負責您?
我父親。 你父親。
就像我的父一樣,有一些方式。 您看到什麼相等?

 

醫生計畫可以分割成用戶端和伺服器端應用程式。 用戶端會提示病患輸入,並顯示醫生的回應。 伺服器端會處理病患輸入,並產生醫生的回應。 這是用戶端應用程式的傳統範例:用戶端負責使用者互動,而伺服器會處理大量的計算負載。 函式不會傳遞太多資料並傳回,但因為資料可能需要大量處理,所以伺服器會處理它。

「醫生」程式會使用字元陣列進行輸入,並傳回另一個字元陣列做為輸出。 下表列出在用戶端與伺服器之間傳遞字元陣列的四種方式,以及實作每個方法所需的屬性和函式。

方法 屬性或函式
計算字元陣列 [ size_is], [ length_is], [ ref]
存根管理的字串 [ string], [ ref], midl_user_allocate 伺服器
存根管理的字串 [ string], [ unique], 用戶端 和伺服器上的midl_user_allocate
傳回字串的函式 [ unique]

 

在與這些屬性組合相關聯的條件約束內,有替代方式可將一個字元陣列從用戶端傳送到伺服器,以及將另一個字元陣列從伺服器傳回用戶端。

下列主題示範可管理這些參數的各種介面之間的設計取捨。