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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 54

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

НСдостатки COM

Π₯отя COM прСдоставляСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прСимущСства, ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ нСдостатки. ΠŸΠ΅Ρ€Π²ΠΎΠ΅: ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌΠΈ для кодирования. Π’ C++ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандартных интСрфСйсов COM ΠΈ использованиС GUIDGEN.EXE для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ GUID для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ интСрфСйса. (Π₯отя Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ VB ΠΈ ATL Object Wizard ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ процСсс создания COM, ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подмноТСство свойств COM).

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

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ .NET обращаСтся с Π°Π΄ΠΎΠΌ DLL, находится ΠΏΠΎ адрСсу msdn.microsoft.com/library/techart/dplywithnet.htm.

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ .NET ΠΊ созданию ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ возмоТности COM, игнорируя ΠΏΡ€ΠΈ этом Π΅Π΅ нСдостатки. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ способ описания ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚. ВмСсто использования для этого GUID ΠΈ рССстра ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° .NET инкапсулируСт своС собствСнноС описаниС Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ сСгмСнтС, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ манифСстом (manifest).

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° выполняСтся просто: Π½Π°Π΄ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ .NET Π² ΠΏΠ°ΠΏΠΊΡƒ исполнимого Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° Π½Π΅Π³ΠΎ ссылаСтся. Когда исполнимому Ρ„Π°ΠΉΠ»Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΎΠ½ просматриваСт Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² манифСстС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Π°. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ вСрсии ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠΊ ΠΎ Π±ΠΎΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ хранятся Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°ΠΏΠΊΠ°Ρ…. (БущСствуСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΏΠΊΠ° для хранСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступной для мноТСства ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΎΠ½Π° называСтся ΠΈΠ½ΠΎΠ³Π΄Π° "Global Assembly Cache" β€” Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ кэш сборок (см. Π³Π»Π°Π²Ρƒ 8).

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² C# ΠΈ VB.NET Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ ΠΎΡ‚ процСсса создания манифСста. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ создаСт просто ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов, заполняСт Π΅Π³ΠΎ классами ΠΈ позволяСт компилятору Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π³Ρ€ΡΠ·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ прСдоставлСния этих классов ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ.

COM ΠΈΠ»ΠΈ .NET?

.NET Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ COM. МногиС ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Microsoft, Π²Π»ΠΎΠΆΠΈΠ»ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ COM. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ срСду Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния .NET, ΠΎΠ½ΠΈ Π½Π΅ Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM, для срСд выполнСния, Π³Π΄Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основными трСбованиями.

Однако для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прСдприятия ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET окаТутся Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Ρ‡Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM. Π’ организациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, достаточно Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, сдСланноС воврСмя, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΏΠΎΠ·Π΄Π°Π»ΠΎ Π½Π° ΡˆΠ΅ΡΡ‚ΡŒ мСсяцСв. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС запускаСтся с сСрвСра Web, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ срСда выполнСния .NET ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ сконфигурирована, ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ получаСтся Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ ΠΎΡ‚ сохранСнного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ развСртывания, Ρ‡Ρ‚ΠΎ обСспСчиваСт ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° .NET.

Π Π΅Ρ‡ΡŒ Π½Π΅ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ сборки .NET, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ сборки .NET Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM. Π‘Π±ΠΎΡ€ΠΊΠΈ .NET, хотя ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²ΠΎ врСмя выполнСния, Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π±ΠΎΠ»Π΅Π΅ доступной для программистов.

ИспользованиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² COM Π² .NET

Π’ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, вСроятно, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π² Π½Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET сдСланы Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ссылок Π½Π° унаслСдованныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM ΠΈΠ· Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° .NET, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… .NET ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° прСдприятия. Π’ частности, Ссли создаСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ .NET ΠΏΠΎΠ²Π΅Ρ€Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, вСроятно, захочСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ COM доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² слоС доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ создаваСмого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Если доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ происходит Ρ‡Π΅Ρ€Π΅Π· унаслСдованныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ‚ΠΎ .NET Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ бизнСс-ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ доставит Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΡ‹ ASP.NET ΠΈΠ»ΠΈ Windows интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ВзаимодСйствиС COM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ классы "ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ" ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ "прокси" β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ соглашСния Π² ΠΌΠΈΡ€Π΅ программирования Π² Ρ†Π΅Π»ΠΎΠΌ. Класс ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ°Π΅Ρ‚ класс, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, прСдоставляя ΠΊ Π½Π΅ΠΌΡƒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ интСрфСйс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ собствСнный интСрфСйс Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ класса. Аналогично, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ прокси для доступа ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΈΠ»ΠΈ являСтся гСографичСски ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ.

Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ссылок

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² тонкости вопросов взаимодСйствия с унаслСдованными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ COM, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ обсудим, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ взаимодСйствия. НашС объяснСниС строится с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния IDE VS.NET, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для написания своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ C#, Π½ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свои собствСнныС эквивалСнтныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Для этого ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ссылок (References Dialog), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ доступно ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Add Reference… Π² мСню Project IDE Visual Studio.NET. Π­Ρ‚ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ, пСрвая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… просто пСрСчисляСт DLL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ для срСды Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET.

Бамая правая Π²ΠΊΠ»Π°Π΄ΠΊΠ°, Projects, пСрСчисляСт всС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ .NET, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ экранС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ C# для ΠΎΠ½Π»Π°ΠΉΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°ΠΊΠ°Π·ΠΎΠ² опираСтся Π½Π° нСсколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ классов C#, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ бизнСс-ΠΏΡ€Π°Π²ΠΈΠ»Π°. (ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ обязаны Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ C#, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Π½ΠΈΡ… ссылался ΠΊΠ»ΠΈΠ΅Π½Ρ‚ C#, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ VB.NET. ЀактичСски, ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ .NET ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET).

БрСдняя Π²ΠΊΠ»Π°Π΄ΠΊΠ°, COM, являСтся Π²ΠΊΠ»Π°Π΄ΠΊΠΎΠΉ для импортирования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² COM Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ .NET.

Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° имССтся ΠΊΠ½ΠΎΠΏΠΊΠ° Browse. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° эту ΠΊΠ½ΠΎΠΏΠΊΡƒ появится Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС DLL COM, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ .NET:

Когда Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½, добавляСм Π΅Π³ΠΎ Π² список ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠ°Π½Π΅Π»ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ COM:

ПослС использования Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ссылок для нахоТдСния DLL COM ΠΈ добавлСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊ списку ссылок COM, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ COM Π² ΠΊΠΎΠ΄Π΅ .NET. VS.NET создаСт пространство ΠΈΠΌΠ΅Π½ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ Ρƒ исходного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM, ΠΈ классы этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² это пространство ΠΈΠΌΠ΅Π½. Бсылки, созданиС экзСмпляров ΠΈ Π²Ρ‹Π·ΠΎΠ² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° COM производятся с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ синтаксисом, ΠΊΠ°ΠΊ ΠΈ Ρƒ собствСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² C#.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. Π’ Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ для добавлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π²Π²ΠΎΠ΄Π° этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ CustomerInfo, поля ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ содСрТат имя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΠ΄ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΈ Ρ‚.Π΄. ЭкзСмпляр класса доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ CustomerTable создаСтся ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вставки ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ΅ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, связанный с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ COM, являСтся ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° C#. ΠœΡ‹ создаСм экзСмпляр ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ .NET ΠΈ позволяСм Π΅ΠΌΡƒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ COM Π·Π° сцСной:

/// <summary>

/// Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ добавляСт Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…,

/// обСспСчивая ΠΏΡ€ΠΈ этом Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ бизнСс-ΠΏΡ€Π°Π²ΠΈΠ».

/// </summary>

public long AddNewCustomer(CustomerInfo objCustomerInfo) {

 long lngNewCustomerID;

 DataAccess.CustomerTable objCustomerTable;

 // Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ².

 objCustomerTable = new DataAccess.CustomerTable();

 lngNewCustomerID =

  objCustomerTable.InsertRecord(

  objCustomerInfo.LastName, objCustomerInfΠΎ.FirstName,

  objCustomerInfo.MiddleName, objCustomerInfo.SocialSecurityNumber);

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли надоСст Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ пространство ΠΈΠΌΠ΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM, Ρ‚ΠΎ инструкция using Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° классы Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сокращСнных, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½:

// Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструкции Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° ...

using DataAccess;


// позволяСт ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° классы DataAccess ΠΏΠΎ ΠΈΡ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ

CustomerTable objCustomerTable;

objCustomerTable = new CustomerTable();

IDE VS.NET Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Intellisense, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠ² класса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

Intellisense ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ с Ρ‡Π»Π΅Π½Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ списком Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².