共用方式為


使用陣列、字串和指標

「醫生」計劃(請參閱平臺軟體開發工具包 (SDK) 中的 \samples\rpc\doctor)是應用程式的良好範例,示範陣列和字串屬性所涉及的設計取捨。 博士程式是更知名的程式Eliza的小型樣本版本,這是由麻省理工學院的人工智慧研究員約瑟夫·魏森鮑姆在1960年代開發的。 此程式使用簡單的模式比對來模仿治療師,以回應自然語言輸入。

Eliza 程式記錄了下列會話。

使用者 伊莉莎
男人都一樣。 以何種方式?
他們總是找一些事情來煩我們。 你能想到一個特定的範例嗎?
嗯,我的男朋友讓我來到這裡。 你的男朋友讓你來到這裡。
他說我大部分時間都沮喪了。 我很抱歉,聽到你很沮喪。
是真的,我很不高興。 你認為來這裡會幫你不要不高興嗎?
我需要一些説明:這似乎很確定。 如果你得到了一些幫助,那對你意味著什麼呢?
也許我可以學會和我媽媽相處。 告訴我更多關於你的家人。
我媽媽照顧我。 家裡還有誰照顧你?
我父親。 你父親。
你就像我父親一樣。 你看到什麼相似之處?

 

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

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

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

 

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

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