使用陣列、字串和指標
醫生計畫 (在 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] |
在與這些屬性組合相關聯的條件約束內,有替代方式可將一個字元陣列從用戶端傳送到伺服器,以及將另一個字元陣列從伺服器傳回用戶端。
下列主題示範可管理這些參數的各種介面之間的設計取捨。