「醫生」計劃(請參閱平臺軟體開發工具包 (SDK) 中的 \samples\rpc\doctor)是應用程式的良好範例,示範陣列和字串屬性所涉及的設計取捨。 博士程式是更知名的程式Eliza的小型樣本版本,這是由麻省理工學院的人工智慧研究員約瑟夫·魏森鮑姆在1960年代開發的。 此程式使用簡單的模式比對來模仿治療師,以回應自然語言輸入。
Eliza 程式記錄了下列會話。
| 使用者 | 伊莉莎 |
|---|---|
| 男人都一樣。 | 以何種方式? |
| 他們總是找一些事情來煩我們。 | 你能想到一個特定的範例嗎? |
| 嗯,我的男朋友讓我來到這裡。 | 你的男朋友讓你來到這裡。 |
| 他說我大部分時間都沮喪了。 | 我很抱歉,聽到你很沮喪。 |
| 是真的,我很不高興。 | 你認為來這裡會幫你不要不高興嗎? |
| 我需要一些説明:這似乎很確定。 | 如果你得到了一些幫助,那對你意味著什麼呢? |
| 也許我可以學會和我媽媽相處。 | 告訴我更多關於你的家人。 |
| 我媽媽照顧我。 | 家裡還有誰照顧你? |
| 我父親。 | 你父親。 |
| 你就像我父親一樣。 | 你看到什麼相似之處? |
[醫生] 程式可以分割成用戶端和伺服器端應用程式。 用戶端會提示患者輸入,並顯示醫生的回應。 伺服器端會處理病患輸入,併產生醫生的回應。 這是用戶端應用程式的傳統範例:用戶端負責用戶互動,而伺服器處理大量的計算負載。 函式不會傳遞和傳回太多數據,但因為數據可能需要大量的處理,所以伺服器會處理它。
Doctor 程式會使用字元數位進行輸入,並傳回另一個字元陣組做為輸出。 下表列出在客戶端與伺服器之間傳遞字元陣列的四種方式,以及實作每個方法所需的屬性和函式。
| 方法 | 屬性或函式 |
|---|---|
| 已計數的字元陣列 | [ size_is], [ length_is], [ ref] |
| 存根管理字串 | [ string], [ ref], 在伺服器上 midl_user_allocate |
| 存根管理的字串 | [ 字串], [ 唯一], 用戶端和伺服器上的 midl_user_allocate |
| 傳回字串的函式 | [ 唯一] |
在與這些屬性組合相關聯的條件約束內,有另一種方式可將一個字元陣列從客戶端傳送至伺服器,以及將另一個字元數位從伺服器傳回至用戶端。
下列主題示範可管理這些參數的各種介面之間的設計取捨。