Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «О Ρ‡Ρ‘ΠΌ Π½Π΅ ΠΏΠΈΡˆΡƒΡ‚ Π² ΠΊΠ½ΠΈΠ³Π°Ρ… ΠΏΠΎ DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 44

Автор А. Π“Ρ€ΠΈΠ³ΠΎΡ€ΡŒΠ΅Π²

end;


procedure TCurveForm.BtnEndClick(Sender: TObject);

begin

 if not FNewLine then

 begin

  DrawCurve(FBack.Canvas);

  FNewLine := True;

  Refresh;

 end;

end;

Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ растра ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ Π½Π° вСсь экран ΠΎΠΊΠ½Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ Ρ‚Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΊΡ€ΠΈΠ²Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ окаТутся Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ, Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄ΡƒΡ‚ β€” ΠΎΠ½ΠΈ вновь Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄ΠΈΠΌΡ‹, Ссли ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π°. Однако Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ прСдусмотрСно, Ρ‡Ρ‚ΠΎ систСма позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ экрана. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° сообщСниС WM_DISPLAYCHANGE ΠΈ мСняя Π² Π½Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ рисунка.

Π“Π»Π°Π²Π° 2

ИспользованиС сокСтов Delphi

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² сСти, Ρ‚ΠΎ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ программирования ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сСти Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ часто. БущСствуСт мноТСство высокоуровнСвых срСдств ΠΎΠ±ΠΌΠ΅Π½Π°, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡ… Π±Ρ‹Π²Π°Π΅Ρ‚ нСдостаточно, ΠΈ Ρ‚ΠΎΠ³Π΄Π° приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ самыС Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Π½Ρ‹Π΅ срСдства сСтСвого программирования β€” сокСты. Однако сущСствуСт Ρ†Π΅Π»Ρ‹ΠΉ ряд ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ²Π»Π°Π΄Π΅Ρ‚ΡŒ этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ нСпросто. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ½Π° слоТна сама ΠΏΠΎ сСбС ΠΈΠ·-Π·Π° большого количСства возмоТностСй. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ отягощСны ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ со старыми вСрсиями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, с соврСмСнной Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Π½Π΅ всСгда Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ. Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Ρƒ программистов Π½Π° Delphi Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трудности, связанныС ΠΊΠ°ΠΊ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сама рСализация Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сокСтов ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° язык Π‘, Ρ‚Π°ΠΊ ΠΈ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ стандартный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ WinSock ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ "застрял" Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ начиная с Windows NT 4 сущСствуСт Π±ΠΎΠ»Π΅Π΅ удобная вторая.

НСсмотря Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ высокий интСрСс ΠΊ сокСтам, Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹ эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Ρ‹Π»Π° Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ описана, ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ. Если Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³, Π³Π΄Π΅ сокСты ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΎΠ±Π·ΠΎΡ€Π½ΠΎ, Π°Π²Ρ‚ΠΎΡ€Ρƒ извСстна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° ΠΊΠ½ΠΈΠ³Π°, посвящСнная сокСтам Π² Windows [3]. Но ΠΎΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Delphi ΠΈ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ спСцифику этого срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ЕстСствСнно, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° нСдостатка ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρƒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… программистов часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ вопросы, связанныС с использованиСм сокСтов Π² Delphi. Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ попытаСмся ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° эти вопросы.

ИзлоТСниС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ сталкивался с сокСтами Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смутныС прСдставлСния ΠΎΠ± устройствС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… сСтСй. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Π·ΠΎΡ€Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ общСтСорСтичСскиС Ρ‚Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эффСктивно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСтСвоС взаимодСйствиС, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ никакая ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π² этих вопросах ΠΎΡ‚ читатСля Π½Π΅ трСбуСтся.

Π“Π»Π°Π²Π° Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° Π΄Π²Π΅ части. ΠŸΠ΅Ρ€Π²Π°Ρ посвящСна стандартным сокСтам, Π° вторая β€” сокСтам Windows. Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ достаточно условны ΠΈ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ пояснСнии. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, стандартными Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ сокСты Π‘Π΅Ρ€ΠΊΠ»ΠΈ (Berkley sockets), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π² унивСрситСтС Π‘Π΅Ρ€ΠΊΠ»ΠΈ для систСмы Unix. Как это Π½ΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½ΠΎ Π·Π²ΡƒΡ‡ΠΈΡ‚, Π½ΠΎ сокСты Π‘Π΅Ρ€ΠΊΠ»ΠΈ появились Π΄ΠΎ появлСния ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… сСтСй. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами Π² систСмС ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π±Ρ‹Π»ΠΈ приспособлСны для TCP/IP. Π Π°Π±ΠΎΡ‚Π° с сокСтами Π‘Π΅Ρ€ΠΊΠ»ΠΈ сдСлана максимально ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² Unix. Π’ частности, для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.

Π‘ΠΎΠΊΠ΅Ρ‚Ρ‹ Π² Windows Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совмСстимы с сокСтами Π‘Π΅Ρ€ΠΊΠ»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π½ΠΈΡ… прСдусмотрСны ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈ получСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚.ΠΏ.). Но возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сокСтами Π² Windows ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ части: Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ укладываСтся Π² идСологию сокСтов Π‘Π΅Ρ€ΠΊΠ»ΠΈ, хотя ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ нСсколько ΠΈΠ½Π°Ρ‡Π΅, ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ являСтся спСцифичным для Windows. Π’Ρƒ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сокСтов Windows, которая ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ соотвСтствуСт сокСтам Π‘Π΅Ρ€ΠΊΠ»ΠΈ, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ стандартными сокСтами, Π° сокСтами Windows (Windows sockets) β€” спСцифичныС для Windows Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΄Π²Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… β€” TCP ΠΈ UDP. Π₯отя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° сокСтов ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, Π½ΠΎ эти Π΄Π²Π°, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто, Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½ΠΈΡ… Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ стандартныС сокСты. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ здСсь ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ особСнностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сокСтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ TCP ΠΈ UDP. ОбъСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ придСтся ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ, ΠΈ Π±Π΅Π· Ρ‚ΠΎΠ³ΠΎ большой, Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ Π»Π΅Π³Ρ‡Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΏΠΎΡ‚ΠΎΠΌ, ΠΈΠ·ΡƒΡ‡ΠΈΠ² TCP ΠΈ UDP.

2.1. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ сокСты

Π‘Π½Π°Ρ‡Π°Π»Π° рассмотрим классичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сокСтами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Π½ΠΈ сущСствования ΠΎΠΊΠΎΠ½ ΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… сообщСний, Π½ΠΈ возмоТности распараллСливания Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° нСсколько Π½ΠΈΡ‚Π΅ΠΉ. Π­Ρ‚ΠΎ. Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π±Π΅Π·ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΠΈ ΠΎΠ΄Π½ΠΎΠ½ΠΈΡ‚Π΅Π²ΠΎΠΉ, ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡ‚Π΅Π²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΅ΡΡ‚ΡŒ срСди ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² этого Ρ€Π°Π·Π΄Π΅Π»Π°. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΡ€ΠΈΡΠΏΠΎΡΠ°Π±Π»ΠΈΠ²Π°Ρ‚ΡŒ стандартныС сокСты ΠΊ ΠΎΠΊΠ½Π°ΠΌ ΠΈ Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡŽ приходится Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π° Π½Π΅ Π·Π° счСт срСдств самой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ·-Π·Π° своСй простоты стандартныС сокСты Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ, Ρ‡Π΅ΠΌ сокСты Windows, Π΄Π°ΠΆΠ΅ Π² ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… прилоТСниях.

2.1.1 БоглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ…

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сокСтов писались Π½Π° языкС Π‘. Π’ этом языкС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру символов, Ρ‚.Π΅., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SOCKET, Socket ΠΈ socket β€” Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ слоТилось, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° встроСнных Π² C Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС, ΠΈΠΌΠ΅Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚ΠΈΠΏΠΎΠ², ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΈ констант β€” Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ, Π° ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” Π² смСшанном (прописныС Π±ΡƒΠΊΠ²Ρ‹ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π½Π°Ρ‡Π°Π»Π° слов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GetWindowText). Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сокСтов нСсколько ΠΎΡ‚ΠΎΡˆΠ»ΠΈ ΠΎΡ‚ этих ΠΏΡ€Π°Π²ΠΈΠ»: ΠΈΠΌΠ΅Π½Π° всСх стандартных сокСтных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. И хотя ΠΌΡ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Π½Π° ПаскалС, Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊ рСгистру символов, всС ΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этой Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ, ΠΏΡƒΡΡ‚ΡŒ это Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π·Π°Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ расхоТдСний с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ источниками.

Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π‘ ΠΊ рСгистру символов создаст Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎce Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, написанных Π½Π° этом языкС, Π² Delphi. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рСгистром символов, Π² частности, Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ SOCKET ΠΈ функция socket. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эти ΠΈΠΌΠ΅Π½Π° Π² Delphi Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Delphi ΠΏΡ€ΠΈ пСрСносС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π±ΡƒΠΊΠ²Ρƒ "Π’", ΠΏΡ€ΠΈΡ‡Π΅ΠΌ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ Ρƒ этого Ρ‚ΠΈΠΏΠ° ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’Π°ΠΊ, Ρ‚ΠΈΠΏΡƒ SOCKET ΠΈΠ· Π‘ Π² Delphi соотвСтствуСт TSocket. ИмСна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π Π°Π½Π΅Π΅ Π±Ρ‹Π» упомянут Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅". Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпонятСн Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π» с языками Π‘ ΠΈ C++, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Delphi макроопрСдСлСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Delphi ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ: сначала компилятор создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вмСсто Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… адрСсов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ‚.ΠΏ. стоят ссылки Π½Π° Π½ΠΈΡ… (Π½Π° этапС компиляции эти адрСса Π΅Ρ‰Π΅ Π½Π΅ извСстны). Π—Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² памяти ΠΈ замСняСт ссылки Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ адрСсами. Π’Π°ΠΊ получаСтся готовая ΠΊ исполнСнию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’ Π‘/C++ трансляция Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ этап: ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ модифицируСтся прСпроцСссором, ΠΈ компилятор ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠΆΠ΅ нСсколько Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ тСкст. ΠœΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΈΠ»ΠΈ просто макросы, β€” это Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссору, ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π΅ΠΌΡƒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠœΠ°ΠΊΡ€ΠΎΡ задаст ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρƒ: Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ встрСчаСтся имя макроса, прСпроцСссор измСняСт Π΅Π³ΠΎ Π½Π° Ρ‚ΠΎΡ‚ тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π½ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ этого макроса. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ макросы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссору #define.

Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС макросы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния констант. НапримСр, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define SOMECONST 10 Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ прСпроцСссор Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ SOMECONST Π½Π° 10. Для компилятора эта Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° SOMECONST для Π½Π΅Π³ΠΎ Π½Π΅ сущСствуСт. Он ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΡƒΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ прСпроцСссором тСкст, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вмСсто SOMECONST Π±ΡƒΠ΄Π΅Ρ‚ 10. ДопускаСтся Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ макросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ Π±ΠΎΠ»Π΅Π΅ слоТным ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ срСдством. Ρ‚.ΠΊ. ΠΈΡ… использованиС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сущСствСнным ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ (обсуТдСниС этого Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ). Π’ соврСмСнных языках ΠΎΡ‚ макросов ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Π’ частности, Π² C++ макросы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ объСмС, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π΅ рСкомСндуСтся, Ρ‚.ΠΊ. Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ бСзопасныС инструмСнты, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ для макросов Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ Π‘# ΠΈ Java макросы ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… для систСмных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Windows (Π² Ρ‚ΠΎΠΌ числС ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сокСтов) макросы ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, Ρ‚.ΠΊ. трСбуСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с языком Π‘. ΠŸΡ€ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Delphi макросы Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ константами, Π° макросы с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ β€” функциями (ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ макрос приходится Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ нСсколькими функциями для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…).