Doctor 프로그램(SDK(Platform Software Development Kit)의 pc\doctor\r\samples 참조)은 배열 및 문자열 특성과 관련된 디자인 장단을 보여 주는 애플리케이션의 좋은 예입니다. 닥터 프로그램은 1960년대 MIT의 인공 지능 연구원 조셉 바이센바움(Joseph Weizenbaum)이 개발한 더 잘 알려진 프로그램인 엘리자의 작은 샘플 버전입니다. 이 프로그램은 자연어 입력에 응답하기 위해 간단한 패턴 일치를 사용하여 치료사를 모방합니다.
엘리자 프로그램은 다음 세션을 기록했다.
| 사용자 | 엘리 자 |
|---|---|
| 남자는 모두 비슷합니다. | 어떤 방식으로? |
| 그들은 항상 뭔가 또는 다른 것에 대해 우리를 도청하고 있습니다. | 특정 예를 생각해 볼 수 있나요? |
| 음, 내 남자 친구가 나를 여기 오게 했어. | 남자친구가 이곳에 오게 했습니다. |
| 그는 내가 많은 시간을 우울해요 말한다. | 우울하다는 소식을 듣고 죄송합니다. |
| 그것은 사실이다, 나는 불행하다. | 이곳에 오면 불행하지 않는 데 도움이 될 것이라고 생각하십니까? |
| 도움이 필요합니다. 그 정도는 확실해 보입니다. | 도움이 있다면 어떤 의미가 있을까요? |
| 아마도 저는 어머니와 어울리는 법을 배울 수 있었을 것입니다. | 가족에 대해 자세히 알려주세요. |
| 어머니는 저를 돌봅니다. | 가족 중 누가 당신을 돌봐 주나요? |
| 우리 아버지. | 당신의 아버지. |
| 당신은 어떤 면에서 아버지와 같습니다. | 당신은 어떤 유사성을 볼 수 있습니까? |
Doctor 프로그램은 클라이언트 쪽 및 서버 쪽 애플리케이션으로 분할할 수 있습니다. 클라이언트 쪽에서 환자에게 입력하라는 메시지를 표시하고 의사의 응답을 표시합니다. 서버 쪽은 환자 입력을 처리하고 의사의 응답을 생성합니다. 이는 클라이언트-서버 애플리케이션의 전형적인 예입니다. 서버가 광범위한 계산 부하를 처리하는 동안 클라이언트는 사용자 상호 작용을 담당합니다. 함수에 전달되어 반환되는 데이터는 많지 않지만, 데이터에 상당한 양의 처리가 필요할 수 있으므로 서버에서 처리합니다.
Doctor 프로그램은 입력에 문자 배열을 사용하고 다른 문자 배열을 출력으로 반환합니다. 아래 표에는 클라이언트와 서버 간에 문자 배열을 전달하는 네 가지 방법과 각 방법을 구현하는 데 필요한 특성 및 함수가 나와 있습니다.
| 접근 | 특성 또는 함수 |
|---|---|
| 카운트된 문자 배열 | [ size_is], [ length_is], [ ref] |
| 스텁으로 관리되는 문자열 | [ 문자열], [ ref], 서버에서 midl_user_allocate |
| 스텁 관리 문자열 | [ 문자열], [ 고유], 클라이언트 및 서버에서 midl_user_allocate |
| 문자열을 반환하는 함수 | [ 고유] |
이러한 특성 조합과 관련된 제약 조건 내에서 한 문자 배열을 클라이언트에서 서버로 보내고 서버에서 클라이언트로 다른 문자 배열을 반환하는 다른 방법이 있습니다.
다음 항목에서는 이러한 매개 변수를 관리할 수 있는 다양한 인터페이스 간의 디자인 절차를 보여 줍니다.