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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π—Π«Πš ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π― Π‘# 2005 И ΠŸΠ›ΠΠ’Π€ΠžΠ ΠœΠ .NET 2.0. 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 5

Автор Π­Π½Π΄Ρ€ΡŽ ВроСлсСн

Π“Π»Π°Π²Π½Ρ‹ΠΌ нСдостатком VB6 (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» устранСн Π² Visual Basic .NET) являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ VB6 являСтся, скорСС, "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-освСдомлСнным" языком, Π° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ. НапримСр, Π² VB6 программисту Π½Π΅ позволяСтся ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ "подчинСнности" (Ρ‚.Π΅. Π½Π΅Ρ‚ классичСского наслСдования) ΠΈ Π½Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ конструкции ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… классов. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, VB6 Π½Π΅ Π΄Π°Π΅Ρ‚ возмоТности ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ "ΡΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ" Π΄ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Win32 API (Ρ‡Ρ‚ΠΎ Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС достаточно слоТно, Π° Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ – опасно).

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Java/J2EE

Π‘Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Java. Π―Π·Ρ‹ΠΊ программирования Java являСтся (ΠΏΠΎΡ‡Ρ‚ΠΈ) ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ синтаксичСскиС ΠΊΠΎΡ€Π½ΠΈ Π² C++. МногиС Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠΉ нСзависимости – Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ СдинствСнноС прСимущСство Java. Java (ΠΊΠ°ΠΊ язык) ΠΈΠ·Π±Π°Π²Π»Π΅Π½ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… синтаксичСских нСсообразностСй C++. Java (ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°) ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ программисту большоС число встроСнных "ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²", содСрТащих Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Ρ‚ΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Java", ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ прилоТСния, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ слоТный интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ связь с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΠΌΠ΅Π½ сообщСниями ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² Web.

Π₯отя Java – ΠΎΡ‡Π΅Π½ΡŒ элСгантный язык, Π΅Π³ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ использованиС Java Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования Java ΠΈ для взаимодСйствия ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с сСрвСром. Как слСдствиС, Java Π½Π΅ позволяСт Π²ΠΎΠ·Π»Π°Π³Π°Ρ‚ΡŒ большой Π½Π°Π΄Π΅ΠΆΠ΄Ρ‹ Π½Π° возмоТности языковой ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΈΠ΄Π΅Ρ‚ Π²Ρ€Π°Π·Ρ€Π΅Π· с Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ Java (Π΅Π΄ΠΈΠ½Ρ‹ΠΉ язык программирования для всСх Π·Π°Π΄Π°Ρ‡). Π Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‚Π°ΠΊΠΎΠ²Π°, Ρ‡Ρ‚ΠΎ Π² ΠΌΠΈΡ€Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ строк ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±Ρ‹ идСально подошло взаимодСйствиС с Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. К соТалСнию, Java Π΄Π΅Π»Π°Π΅Ρ‚ эту Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ.

Java Π² чистом Π²ΠΈΠ΄Π΅ просто Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ»ΠΈ слоТныС вычислСния (Π² этих случаях ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Java оставляСт ΠΆΠ΅Π»Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ). Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ мСстС Π²Ρ‹Π³ΠΎΠ΄Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C++). Π£Π²Ρ‹, ΠΏΠΎΠΊΠ° Java Π½Π΅ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности доступа ΠΊ "Ρ‡ΡƒΠΆΠ΅Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ" API, истинная интСграция Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языков оказываСтся практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ COM

МодСль COM (Component Object Model – модСль ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) Π±Ρ‹Π»Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ каркасом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Microsoft. По сути, COM – это Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, "заявившая" ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: Ссли класс Π±ΡƒΠ΄Π΅Ρ‚ построСн Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ COM, Ρ‚ΠΎ получится Π±Π»ΠΎΠΊ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования.

ΠŸΡ€Π΅Π»Π΅ΡΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ COM-сСрвСра Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ способ доступа ΠΊ Π½Π΅ΠΌΡƒ Π½Π΅ зависит ΠΎΡ‚ языка. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ программисты, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ C++, ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ COM-классы, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Π΅ для использования Π² VB6. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Delphi, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ COM-классы, построСнныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C, ΠΈ Ρ‚.Π΄. Однако, ΠΈ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ± этом Π·Π½Π°Π΅Ρ‚Π΅, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ COM ΠΎΡ‚ языка нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°. НапримСр, Π½Π΅Ρ‚ возмоТности ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ COM-класс ΠΈΠ· ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ COM Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ классичСского наслСдования). ВмСсто этого для использования Ρ‚ΠΈΠΏΠΎΠ² COM-класса Π²Π°ΠΌ придСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠ΅Π΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ "обладания".

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ прСимущСством COM являСтся ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ дислокации. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π°ΠΊΠΈΠ΅ конструкции, ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ прилоТСния (AppID), "Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ" ΠΈ "замСститСли" Π² срСдС выполнСния COM, программист ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСобходимости нСпосрСдствСнного обращСния ΠΊ сокСтам, RPC-Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ элСмСнтам. Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ VB6 COM-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

' Π­Ρ‚ΠΎΡ‚ Π±Π»ΠΎΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° VB6 ΠΌΠΎΠΆΠ΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ COM-класс,

' созданный Π½Π° любом языкС, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌ COM, ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ

' Π² любой Ρ‚ΠΎΡ‡ΠΊΠ΅ сСти (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Π°ΡˆΡƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ).

Dim с as MyCOMClass

Set с = New MyCOMClass ' Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ выясняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AppID.

с.DoSomeWork

Π₯отя COM ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ модСлью, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΎΠ½Π° Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ слоТна (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ нСсколько мСсяцСв Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² – особСнно Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π° C++). Π‘ Ρ†Π΅Π»ΡŒΡŽ упрощСния процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Ρ‹Π»ΠΎ создано мноТСство каркасов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ COM. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ATL (Active Template Library – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… шаблонов), которая обСспСчиваСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ мноТСство C++-классов, шаблонов ΠΈ макросов, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… созданиС COM-Ρ‚ΠΈΠΏΠΎΠ².

МногиС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки Ρ‚Π°ΠΊΠΆΠ΅ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ инфраструктуру COM ΠΎΡ‚ Π³Π»Π°Π· программиста. Однако ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ самого языка оказываСтся нСдостаточно для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ всю ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ COM. Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ использовании ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простого совмСстимого с COM языка (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, VB6), Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ с "Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌΠΈ" ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ рСгистрации ΠΈ многочислСнными ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, связанными с инсталляциСй ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π² совокупности Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ "ΠΊΠΎΡˆΠΌΠ°Ρ€ΠΎΠΌ DLL").

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Windows DNA

Ко всСм ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ слоТностям Π΅Ρ‰Π΅ добавляСтся такая ΠΌΠ΅Π»ΠΎΡ‡ΡŒ, ΠΊΠ°ΠΊ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. Π—Π° послСдниС нСсколько Π»Π΅Ρ‚ Microsoft Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° Π² своС сСмСйство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² мноТСство связанных с Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ возмоТностСй. К соТалСнию, созданиС Web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… совмСстимой с COM Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Windows DNA (Distributed interNet Applications Architecture – Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° распрСдСлСнных сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ) Ρ‚Π°ΠΊΠΆΠ΅ оказываСтся ΠΎΡ‡Π΅Π½ΡŒ нСпростым Π΄Π΅Π»ΠΎΠΌ.

НСкоторая доля этой слоТности Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ простого Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ Windows DNA Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования мноТСства Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ языков (ASP, HTML, XML, JavaScript, VBScript, Π° Ρ‚Π°ΠΊΠΆΠ΅ COM(+) ΠΈ API доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ADO).

Одной ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ с синтаксичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· этих Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ связаны ΠΎΠ΄Π½Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ. НапримСр, Π² JavaScript ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ C, a VBScript являСтся подмноТСством VB6. COM-сСрвСры, созданныС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² срСдС выполнСния COM+, ΠΏΠΎ Π²ΠΈΠ΄Ρƒ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ASP-страниц, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ… Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ – Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ запутанная смСсь Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΈ это, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, самоС Π²Π°ΠΆΠ½ΠΎΠ΅, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ язык ΠΈ каТдая тСхнология ΠΈΠΌΠ΅ΡŽΡ‚ свои собствСнныС систСмы Ρ‚ΠΈΠΏΠΎΠ² (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ ΠΎΠ΄Π½Π° Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ). НапримСр, нСльзя ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ "int" Π² JavaScript ΠΈ "Integer" Π² VB6 ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π² точности ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅.

РСшСниС .NET

Блишком ΠΌΠ½ΠΎΠ³ΠΎ для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠΊΠ° истории. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Тизнь программиста Windows Π±Ρ‹Π»Π° Ρ‚Ρ€ΡƒΠ΄Π½Π°. ΠšΠ°Ρ€ΠΊΠ°Ρ .NET Framework являСтся достаточно Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ "силовой" ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Тизнь Π»Π΅Π³Ρ‡Π΅. РСшСниС, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ .NET, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ "ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС" (ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π²ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠΎΡΡ‹Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π° Ρ‚Π°ΠΊΠΎΠ΅ извСстиС). Π’Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ ΠΈΠ· дальнСйшСго ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΊΠ½ΠΈΠ³ΠΈ, Ρ‡Ρ‚ΠΎ .NET Framework – это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ новая модСль для создания систСм ΠΊΠ°ΠΊ Π² сСмСйствС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Windows, Ρ‚Π°ΠΊ ΠΈ мноТСствС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ систСм Microsoft, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Mac OS X ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Unix/ Linux. Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π²ΠΎΡ‚ Π²Π°ΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ список Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… возмоТностСй, обСспСчиваСмых .NET.

β€’ ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ взаимодСйствия с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π­Ρ‚ΠΎ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ) Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ (Ρ‚.Π΅. Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ) с Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ .NET-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сСрвисы PInvoke (Platform Invocation Services – сСрвисы Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Π±Π°Π·Π΅ C (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ API ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы) ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° .NET.

β€’ Полная ΠΈ Ρ‚ΠΎΡ‚Π°Π»ΡŒΠ½Π°Ρ интСграция языков. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ COM, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° .NET ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅ΠΆΡŠΡΠ·Ρ‹ΠΊΠΎΠ²ΠΎΠ΅ наслСдованиС, ΠΌΠ΅ΠΆΡŠΡΠ·Ρ‹ΠΊΠΎΠ²ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠ΅ΠΆΡŠΡΠ·Ρ‹ΠΊΠΎΠ²ΡƒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ.

β€’ ΠžΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для всСх языков с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ .NET. Одной ΠΈΠ· особСнностСй этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° являСтся Ρ‡Π΅Ρ‚ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ², "понятных" ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ языку.

β€’ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ слоТностСй прямого обращСния ΠΊ API ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ всСми языками с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ .NET.

β€’ ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ COM. Π’ собствСнном Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ .NET-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π½Π΅Π±ΡƒΠ΄Π΅Ρ‚ мСста для IClassFactory, IUnknown, IDispatch, IDL-ΠΊΠΎΠ΄Π° ΠΈ "Π·Π»ΠΎΠ±Π½Ρ‹Ρ…" Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ VARIANT (BSTR, SAFEARRAY ΠΈ Ρ‚.Π΄.).

β€’ УпрощСнная модСль инсталляции. Богласно спСцификациям .NET, Π½Π΅Ρ‚ нСобходимости Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π±ΠΈΠ½Π°Ρ€Π½ΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π² рССстрС систСмы. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ .NET Π²ΠΏΠΎΠ»Π½Π΅ допускаСт сущСствованиС мноТСства вСрсий ΠΎΠ΄Π½ΠΎΠ³ΠΎ *.dll Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС.

На основС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ этого списка Π²Ρ‹, вСроятно, ΡƒΠΆΠ΅ сами ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° .NET Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с COM (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° эти каркаса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ исходят ΠΈΠ· Microsoft). ЀактичСски СдинствСнным способом взаимодСйствия Ρ‚ΠΈΠΏΠΎΠ² .NET ΠΈ COM оказываСтся использованиС возмоТностСй слоя взаимодСйствия.