使用数组、字符串和指针

(平台软件开发工具包 (SDK) ) 中的 \samples\rpc\doctor 程序是一个很好的应用程序示例,它演示了数组和字符串属性所涉及的设计权衡。 医生计划是一个更知名的程序的小型样本版本,Eliza,由人工智能研究员约瑟夫·魏曾鲍姆在20世纪60年代在麻省理工学院开发。 程序通过使用简单的模式匹配来响应自然语言输入来模仿治疗师。

Eliza 程序录制了以下会话。

用户 伊丽莎
男人都一样。 以什么方式?
他们总是在抱怨我们某事或其他事。 你能想一个具体示例吗?
嗯,我男朋友让我来这里。 你的男朋友让你来这里。
他说我很多时候很沮丧。 我很抱歉听到你很沮丧。
这是真的,我很不高兴。 你认为来这里会帮助你不高兴吗?
我需要一些帮助;这似乎很确定。 如果你得到了一些帮助,那对你意味着什么?
也许我能学会和妈妈相处。 请告诉我更多关于你的家庭的信息。
我妈妈照顾我。 你家里还有谁照顾你?
我父亲。 你父亲。
你在某些方面就像我的父亲。 你看到什么相似之处?

 

医生计划可以拆分为客户端和服务器端应用程序。 客户端提示患者输入并显示医生的反应。 服务器端处理患者输入并生成医生的响应。 这是客户端-服务器应用程序的经典示例:客户端负责用户交互,而服务器处理大量的计算负载。 向 函数传递和返回的数据不多,但是,由于数据可能需要大量处理,因此服务器会对其进行处理。

Doctor 程序使用字符数组进行输入,并返回另一个字符数组作为输出。 下表列出了在客户端和服务器之间传递字符数组的四种方法,以及实现每种方法所需的属性和函数。

方法 属性或函数
计数字符数组 [ size_is], [ length_is], [ ref]
存根管理的字符串 [ string], [ ref], midl_user_allocate 服务器上的
存根管理的字符串 [ string], [ unique], midl_user_allocate 客户端和服务器上
返回字符串的函数 [ unique]

 

在与这些属性组合关联的约束中,有其他方法可将一个字符数组从客户端发送到服务器,以及将另一个字符数组从服务器返回到客户端。

以下主题演示了可管理这些参数的各种接口之间的设计权衡。