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

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

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

Как ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ TlbExp ΠΈ RegAsm Π±Ρ‹Π»ΠΈ созданы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² тСсном взаимодСйствии. RegAsm ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для рСгистрации ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° .NET Π² слуТбах COM, Π° Π·Π°Ρ‚Π΅ΠΌ TlbExp β€” для экспорта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² COM ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΈ ссылки Π½Π° Π½Π΅Π΅ ΠΈΠ· языков Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… .NET.

Π‘Π»ΡƒΠΆΠ±Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

ΠœΡ‹ рассказали ΠΎ взаимодСйствии ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ COM ΠΈ .NET. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²ΠΈΠ΄Π΅ β€” ΠΎ взаимодСйствии ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄ΠΎΠΌ .NET ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ нСуправляСмом ΠΊΠΎΠ΄Π΅. Π•Π³ΠΎ обСспСчиваСт тСхнология, называСмая слуТбами Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈΠ»ΠΈ, ΠΊΡ€Π°Ρ‚ΠΊΠΎ, PInvoke.

НСуправляСмый ΠΊΠΎΠ΄ ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, ΠΎ Ρ‡Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ, β€” Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ нСуправляСмый ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ синонимами.

НСнадСТный ΠΊΠΎΠ΄ C# являСтся ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ встроСн Π² Π±Π»ΠΎΠΊ с прСфиксом Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова unsafe. Код Π² Ρ‚Π°ΠΊΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ΄ΠΈΠΎΠΌ C++, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ массивы Π½Π° основС стСка. Он считаСтся Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠ΄ΠΈΠΎΠΌΡ‹ часто Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ошибками, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ управляСтся срСдой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния .NET.

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

Π‘Π»ΡƒΠΆΠ±Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΠΎΠ΄Ρƒ .NET Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΈ с достовСрно нСуправляСмым.

Доступ ΠΊ нСуправляСмому ΠΊΠΎΠ΄Ρƒ

Π₯отя .NET ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с нСуправляСмым ΠΊΠΎΠ΄ΠΎΠΌ Π² любой DLL, Ρ‡Π°Ρ‰Π΅ всСго ΠΎΠ½ взаимодСйствуСт с ΠΊΠΎΠ΄ΠΎΠΌ Π² DLL, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Windows API. Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ user32.dll, gdi32.dll ΠΈ kernel32.dll. ΠŸΡ€ΠΎΡ†Π΅ΡΡ прСдставлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· этих DLL для ΠΊΠΎΠ΄Π° .NET Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌ Π»ΡŽΠ±ΠΎΠΌΡƒ, ΠΊΡ‚ΠΎ использовал ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Declare для прСдоставлСния Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Win32 API для ΠΊΠΎΠ΄Π° VB6:

[sysimport(dll="user32.dll")]

public static extern int MessageBoxA(int Modal, string Message, string Caption, int Options);

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ .NET Π²Ρ‹Π·ΠΎΠ²Π° осущСствляСтся Π²Ρ‹Π·ΠΎΠ² Windows API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΊΠ½ΠΎ с сообщСниСм. Π’ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ опрСдСляСтся DLL, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ функция Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° .NET ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ API:

MessageBoxA(0, "PInvoke worked!", "PInvoke Example", 0);

Π₯отя здСсь для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π·Π°Π΄Π°Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ ΠΈ для Π²Ρ‹Π·ΠΎΠ²Π° Windows API, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° отобраТаСтся, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ для Π½Π΅Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя, ΠΊΠ°ΠΊ дСлалось Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. ИзмСним Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ имя "MessageBox" Π½Π° имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ опрСдСляСт, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π·ΠΎΠ² API. Π‘Π΄Π΅Π»Π°Π΅ΠΌ это, опрСдСляя Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ sysimport:

[sysimport (dll="ustr32.dll", name="MessageBoxA") ]

public static extern int ErrorMessage(int Modal, string Message, string Caption, int Options);

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Windows API Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ:

ErrorMessage(0, "PInvoke worked!", "PInvoke.Example", 0);

НСдостатки PInvoke

ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ достаточно просто ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· ΠΊΠΎΠ΄Π° .NET. К соТалСнию, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ нСдостатки использования нСуправляСмого ΠΊΠΎΠ΄Π°.

Π₯отя Microsoft ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ вопрос взаимодСйствия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΡƒΠΆΠ΅ Π½Π° Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π΅ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET. ΠŸΡ€ΠΈ взаимодСйствии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ .NET Π½Π° любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ β€” ΠΎΡ‚ Macintosh Π΄ΠΎ Unix ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ? обСспСчСна срСдой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния .NET. Однако ΠΏΡ€ΠΈ использовании PInvoke, ΠΊΠΎΠ΄ .NET соСдиняСтся с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Windows.

Рассматривая использованиС PInvoke, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ трСбуСмая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ прСдставлСна Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом .NET. Если срСда Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния .NET Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ пСрСнСсСна Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы .NET Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ пСрСнСсСны, ΠΈ ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ шанс ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с нСбольшими измСнСниями.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ эта Π³Π»Π°Π²Π°, COM ΠΈ .NET ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ тСхнологиями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ способны Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ совмСстно, Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ взаимодСйствия, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ TlbImp.exe, RegAsm.exe ΠΈ TlbExp.exe, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ унаслСдованныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM Π² качСствС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² для Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ .NET.

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

Π“Π»Π°Π²a 20

Π‘Π»ΡƒΠΆΠ±Ρ‹ COM+ 

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ этой Π³Π»Π°Π²Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… вопроса: 1) Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ слуТбы COM+, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚; ΠΈ 2) ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ слуТбы COM+ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET Π² Ρ†Π΅Π»ΠΎΠΌ ΠΈ Π² C#, Π² частности.

ΠœΡ‹ рассмотрим ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вопрос Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ части этой Π³Π»Π°Π²Ρ‹. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с MTS β€” ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠΎΠΌ слуТб COM+, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈ рассмотрСнии Π½ΠΎΠ²Ρ‹Ρ… слуТб, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний ΠΈ события. Как Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, слуТбы COM+ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, β€” Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ программист C# ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅.

ПослСдняя Ρ‡Π°ΡΡ‚ΡŒ Π³Π»Π°Π²Ρ‹ посвящСна Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ вопросу: ΠΊΠ°ΠΊ слуТбы COM+ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET. ΠœΡ‹ рассмотрим классы, интСрфСйсы ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² пространствС ΠΈΠΌΠ΅Π½ EnterpriseServices, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ RegSvcs.exe.

Π₯отя слуТбы COM+ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ слоТными, Π² частности, ΠΊΠΎΠ³Π΄Π° потрСбуСтся ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ Π±Π°Ρ€ΡŒΠ΅Ρ€Ρ‹ взаимодСйствия, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² выясняСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ экономят ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ прилоТСния, построСнныС Π½Π° ΠΈΡ… основС, ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с рассмотрСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ появились слуТбы COM+.

Π‘Π»ΡƒΠΆΠ±Ρ‹ COM+ Π² рСтроспСктивС

На Π·Π°Ρ€Π΅ программирования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ всС с самого Π½Π°Ρ‡Π°Π»Π°. Если Π΅ΠΌΡƒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, возмоТности Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, придумывая ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для поддСрТания индСксов ΠΈ поиска записСй. Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния люди Ρ‚Ρ€Π°Ρ‚ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ колСса.

По ΠΌΠ΅Ρ€Π΅ развития Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ программирования поставщики ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ сСрвСрныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. (Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ потрСбуСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Oracle ΠΈΠ»ΠΈ SQL Server). По ΠΌΠ΅Ρ€Π΅ дальнСйшСго развития всС большС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ извлСкалось ΠΈΠ· ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠ»ΠΎΡΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сСрвСрных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

МоТно Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ слуТбы COM+ ΠΊΠ°ΠΊ проявлСниС этой Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΠΈ. Π‘Π»ΡƒΠΆΠ±Ρ‹ COM+ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΠ»ΠΈ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² уровня прСдприятия, прСдоставляя Ρ†Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Когда ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ обСспСчСниС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ для получСния Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ Π½Π° слуТбы COM+.

Бостав слуТб COM+ 

Π‘Π»ΡƒΠΆΠ±Ρ‹ COM+ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Тизнь ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Windows NT, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Microsoft (MTS). Π’ настоящСС врСмя Windows 2000 опрСдСляСт MTS ΠΊΠ°ΠΊ ΡΠΎΡΡ‚Π°Π²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, пСрСимСновывая Π΅Π΅ Π² Ρ…ΠΎΠ΄Π΅ процСсса.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎ всСм исходным свойствам MTS, слуТбы COM+ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Π½ΠΎΠ²Ρ‹Π΅ возмоТности, Π² Π΅Ρ‰Π΅ большСй стСпСни ΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ объСм ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π‘Π»ΡƒΠΆΠ±Ρ‹ COM+, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ прСдставлСны Π² MTS, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя:

β–‘ ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

β–‘ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡƒΠ»ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

β–‘ ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (JIT, Just-in-Time)

β–‘ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

НовыС слуТбы, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ COM+:

β–‘ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° событий

β–‘ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

β–‘ Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· слуТб COM+, ΠΊΠ°ΠΊ старыС, извСстныС ΠΈΠ· MTS, Ρ‚Π°ΠΊ ΠΈ Π½ΠΎΠ²Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ‹. Но сначала ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрим Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ° COM+: "snap-in" слуТб ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (Component Services). (Snap-in являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ SQL Server ΠΈΠ»ΠΈ IIS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ интСрфСйса консоли управлСния Microsoft β€” ММБ.)

Snap-in слуТб ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²