配列、文字列、およびポインターの使用
Doctor プログラム (プラットフォーム ソフトウェア開発キット (SDK) の \samples\rpc\doctor を参照) は、配列属性と文字列属性に関連する設計のトレードオフを示すアプリケーションの良い例です。 博士プログラムは、1960年代にMITで人工知能研究者ジョセフ・ワイゼンバウムによって開発された、よく知られたプログラムの小さなサンプルバージョンであるエリザです。 プログラムは、自然言語入力に応答する単純なパターンマッチングを使用してセラピストを模倣します。
エライザプログラムは、次のセッションを記録しました.
User | イライザ |
---|---|
男性はみんな同じだ。 | どのような方法で? |
彼らは常に何かや他のことについて私たちを盗聴しています。 | 具体的な例を考えることができますか? |
さて、私のボーイフレンドは私をここに来させました。 | あなたのボーイフレンドはあなたがここに来させました。 |
彼は私が多くの時間を落ち込んでいると言います。 | あなたが落ち込んでいると聞いて申し訳ありません。 |
それは本当です、私は不満です。 | ここに来て、あなたが不満にならないのに役立つと思いますか? |
私はいくつかの助けが必要です。それは確かなようです。 | あなたはいくつかの助けを得た場合、それはあなたに何を意味しますか? |
おそらく、私は母と一緒にやることを学ぶことができました。 | あなたの家族について詳しく教えてください。 |
私の母は私の世話をします。 | あなたの家族の他の誰があなたに面倒を見るのですか? |
私の父。 | あなたのお父さん。 |
あなたはある点で私の父に似ています。 | どのような類似点が表示されますか? |
Doctor プログラムは、クライアント側とサーバー側のアプリケーションに分割できます。 クライアント側は患者に入力を求め、医師の応答を表示します。 サーバー側で患者の入力を処理し、医師の応答を生成します。 これは、クライアント/サーバー アプリケーションの従来の例です。サーバーが広範な計算負荷を処理している間、クライアントはユーザー操作を担当します。 関数に渡されて返されるデータはあまりありませんが、データに大量の処理が必要になる可能性があるため、サーバーはそれを処理します。
Doctor プログラムは、入力に文字配列を使用し、別の文字配列を出力として返します。 次の表は、クライアントとサーバーの間で文字配列を渡す 4 つの方法と、各アプローチを実装するために必要な属性と関数を示しています。
アプローチ | 属性または関数 |
---|---|
カウントされた文字配列 | [ size_is], [ length_is], [ ref] |
スタブ管理文字列 | [ string], [ ref], サーバー上のmidl_user_allocate |
スタブ管理文字列 | [ string], [ unique], midl_user_allocate on client and server |
文字列を返す関数 | [ unique] |
これらの属性の組み合わせに関連付けられている制約内では、1 つの文字配列をクライアントからサーバーに送信し、サーバーからクライアントに別の文字配列を返す別の方法があります。
次のトピックでは、これらのパラメーターを管理できるさまざまなインターフェイス間の設計上のトレードオフについて説明します。