使用数组、字符串和指针
(平台软件开发工具包 (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] |
在与这些属性组合关联的约束中,有其他方法可将一个字符数组从客户端发送到服务器,以及将另一个字符数组从服务器返回到客户端。
以下主题演示了可管理这些参数的各种接口之间的设计权衡。