Sdílet prostřednictvím


Použití polí, řetězců a ukazatelů

Program Doctor (viz \samples\rpc\doctor v sadě SDK (Platform Software Development Kit)) je dobrým příkladem aplikace, která demonstruje kompromisy návrhu spojené s atributy pole a řetězce. Program Doctor je malá ukázková verze lépe známého programu Eliza, vyvinutá výzkumníkem umělé inteligence Joseph Weizenbaum v MIT v roce 1960. Program napodobuje terapeuta pomocí jednoduchého porovnávání vzorů k reakci na vstup přirozeného jazyka.

Program Eliza zaznamenal následující relaci.

Uživatel Eliza
Muži jsou všichni stejně. Jakým způsobem?
Vždy nás něčím otravují. Můžete si představit konkrétní příklad?
Můj přítel mě sem dostal. Tvůj přítel tě sem dostal.
Říká, že jsem hodně času deprimovaný. Je mi líto, že slyším, že jsi deprimovaný.
Je to pravda, jsem nešťastná. Myslíš si, že ti návštěva tady pomůže nebýt nešťastný?
Potřebuji pomoc; to se zdá být velmi jisté. Co by pro vás znamenalo, kdybyste získali pomoc?
Možná bych se mohl naučit vycházet se svou matkou. Řekněte mi víc o vaší rodině.
Moje matka se o mě postará. Kdo jiný ve vaší rodině se o tebe postará?
Můj otec. Tvůj otec.
Jsi jako můj otec nějakým způsobem. Jakou podobnost vidíš?

 

Program Doctor lze rozdělit na klientské a serverové aplikace. Klientská strana vyzývá pacienta k zadání vstupu a zobrazuje odpověď lékaře. Serverová strana zpracuje vstup pacienta a vygeneruje odpověď lékaře. Toto je klasický příklad aplikace klientského serveru: klient zodpovídá za interakci uživatele, zatímco server zpracovává rozsáhlé výpočetní zatížení. Funkce nepředá a nevrátí mnoho dat, ale protože data mohou vyžadovat značné množství zpracování, server je zpracuje.

Program Doctor používá pro vstup znakovou matici a jako výstup vrátí další znakovou matici. Následující tabulka uvádí čtyři způsoby předávání znakových polí mezi klientem a serverem a atributy a funkce potřebné k implementaci jednotlivých přístupů.

Přístup Atributy nebo funkce
Počítané pole znaků [ velikost_je], [ délka_je], [ odkaz]
Řetězce spravované stubem [ řetězec], [ ref], midl_user_allocate na serveru
Řetězce spravované zástupnými procedurami [ řetězcové], [ jedinečné], midl_user_allocate na klientovi a serveru
Funkce, která vrací řetězec [ jedinečné]

 

V rámci omezení spojených s těmito kombinacemi atributů existují alternativní způsoby odeslání jednoho znakového pole z klienta na server a vrácení jiného pole znaků ze serveru do klienta.

Následující témata ukazují kompromisy návrhu mezi různými rozhraními, která mohou tyto parametry spravovat.