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

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

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

public class StrawPoll : System.Web.UI.WebControls.WebControl, INamingContainer {

 private string title = "Straw Poll";

 private pollStyle currentPollStyle = pollStyle.voteandvalues;

 public event OptionEventHandler Voted;


 protected void OnVoted(OptionEventArgs e) {

  Voted(this, e);

 }

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ для инициирования события, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ· элСмСнтов управлСния ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² Option ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ голосования:

 public void ChildVote(OptionEventArgs e) {

  OnVoted(e);

 }

НаконСц, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° события ΠΊΠ½ΠΎΠΏΠΊΠΈ голосования Π² Option, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, задавая для Π½Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

protected void btnVote_Click(object sender, System.EventArgs e) {

 Increment();

 StrawPoll parent = (StrawPoll)Parent;

 if (parent.PollStyle == pollStyle.voteonly) {

  parent.PollStyle = pollStyle.valuesonly;

 }

 OptionEventArgs eOption = new OptionEventArgs();

 eOption.originatingOption = this;

 parent.ChildVote(eOption);

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий Π½Π° страницС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ элСмСнта управлСния. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° страницС ASP.NET, добавляя ΠΌΠ΅Ρ‚ΠΊΡƒ для использования Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅.

<form id=Form1 method= post runat="server">

 <PCS:StrawPoll id=strawPoll1

  title="Who is your favorite James Bond?"

  Runat="server" OnVoted="strawPoll1_OnVoted" PollStyle="voteonly">

  <PCS:Option Name="Sean Connery" Votes="101" />

  <PCS:Option Name="Roger Moore" Votes="83" />

  <PCS:Option Name="George Lazenby" Votes="32" />

  <PCS:Option Name="Timothy Dalton" Votes="28" />

  <PCS:Option Name="Pierce Brosnan" Votes="95" />

 </PCS:StrawPoll>

 <br> <br>

 <asp:Label Runat= "server" ID="resultLabel" Text="No vote cast." />

</form>

вмСстС со связанным объявлСниСм Π² скрытом ΠΊΠΎΠ΄Π΅ Ρ„ΠΎΡ€ΠΌΡ‹, Ссли ΠΎΠ½ Π½Π΅ добавляСтся автоматичСски:

public class WebForm1 : System.Web.UI. Page {

 protected StrawPoll strawPoll1;

Π—Π°Ρ‚Π΅ΠΌ сдСлаСм Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² самом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ событий:

 protected void strawPoll1_OnVoted(object sender, OptionEventArgs e) {

  result.Label.Text = "You voted for " + e.originatingOption.Name + ".";

 }

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, послС голосования ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° наш голос:

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

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

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

Π­Ρ‚Π° Π³Π»Π°Π²Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π³Π»Π°Π²Ρ‹, ΠΏΠΎΡΠ²ΡΡ‰Π΅Π½Π½Ρ‹Π΅ Web. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ взаимодСйствия COM ΠΈ .NET.

Π“Π»Π°Π²Π° 19

ВзаимодСйствиС с COM

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ совмСстимыми, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ, компания Microsoft прСдоставляСт срСдства Π² SDK .NET для создания прокси COM для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² .NET ΠΈ прокси .NET для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² COM. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти прокси вмСстС с ΠΏΠ°Ρ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ унаслСдованныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… .NET ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET Π² своих прилоТСниях, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ прилоТСниями .NET.

Π’ этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ COM ΠΈ .NET, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ COM ΠΈ .NET Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅, Π½ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… прилоТСниях Windows.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ COM ΠΈ .NET

COM ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Π°Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль" (Component Object Model). Для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Windows ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ COM, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ, Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° дСйствуСт, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ…ΡΡ созданиСм Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² устройств ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π½Π° компанию Microsoft, появлСниС .NET ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² .NET ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ слоТностСй программирования COM. Однако, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ COM Π±Ρ‹Π»Π° Π΄ΠΎ сСгодняшнСго дня всС ΠΆΠ΅ сущСствСнной Ρ‡Π°ΡΡ‚ΡŒΡŽ программирования Windows, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° дСйствуСт ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ прСимущСства ΠΎΠ½Π° прСдоставляСт.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· свящСнных ΠΈΠ΄Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΈ Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ добивались этого, поддСрТивая Ρ„Π°ΠΉΠ»Ρ‹ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ…ΠΎΡ‚Π΅Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΎΠ½ использовал ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ #include для соСдинСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ„Π°ΠΉΠ»Π° основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ПослС компиляции стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΈΡ… Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°, статичСски компоновались Π² ΠΎΠ΄ΠΈΠ½ исполнимый Ρ„Π°ΠΉΠ».

БущСствуСт, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΄Π²Π° нСдостатка Ρƒ статичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ: ΠΎΠ½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ излишнСго пространства памяти, размСщая ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… исполнимых Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΈ, Ссли обнаруТиваСтся ошибка Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, трСбуСтся пСрСкомпиляция ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ распространСниС всСх исполнимых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ нашли способ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ динамичСски ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ исполнимыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой схСмы нСсколько исполнимых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠ³ΡƒΡ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» динамичСски ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Dynamic Link Library, DLL). Если трСбуСтся ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² слуТСбной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ просто Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ DLL, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится эта функция, Π±Π΅Π· пСрСкомпиляции ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ распространСния всСх исполнимых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

НСсмотря Π½Π° своС удобство ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, DLL ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ нСдостаток: ΠΎΠ½ΠΈ зависят ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ языка программирования. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, DLL, компилированная ΠΈΠ· исходного ΠΊΠΎΠ΄Π° Π‘, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· клиСнтской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»Π° написана Π½Π° Π‘. (Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· этого ΠΏΡ€Π°Π²ΠΈΠ»Π°, Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΡ‚ программиста ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… усилий).

COM Π±Ρ‹Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π² ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ программисты ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов Π½Π° Ρ‚Π°ΠΊΠΎΠΌ языкС, ΠΊΠ°ΠΊ C++, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ совмСстимого с COM языка программирования, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Delphi ΠΈΠ»ΠΈ Visual Basic. COM Π±Ρ‹Π» Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ Π² основС Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ OLE (БвязываниС ΠΈ встраиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) ΠΈ элСмСнтов управлСния ActiveX.

Π‘Π»ΡƒΠΆΠ±Ρ‹ COM+ β€” послСдняя вСрсия Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ COM, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстная ΠΊΠ°ΠΊ Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Microsoft, являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows 2000, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ±Ρ‰Π΅ΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, обСспСчСния бСзопасности ΠΈ события, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ программистам COM Ρ†Π΅Π½Π½ΠΎΠ΅ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± этом рассказываСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ COM

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ .NET Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ нСсовмСстимы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ COM. Π”Π°Π»Π΅Π΅ слСдуСт сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ΅ объяснСниС. Π‘ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΊΠ½ΠΈΠ³Π΅ "Professional COM Applications with ATL" ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Wrox Press (ISBN 1861001703).

COM устанавливаСт стандарты для интСрфСйсов, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… клиСнтский ΠΊΠΎΠ΄ общаСтся с массами ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ клиСнтский ΠΊΠΎΠ΄ общаСтся с классами ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· эти стандартизованныС интСрфСйсы, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нСсвСдущим ΠΎ дСталях, спСцифичСских для языка программирования, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ эти классы ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ интСрфСйсы COM Π² качСствС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ…, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ VB ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° C++.

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

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс COM ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, ΠΈΠΌΠ΅Π΅Ρ‚ 128-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΎ всС Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΈ Π²ΠΎ всСх мСстах. Π­Ρ‚ΠΈ глобально ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΈΠ»ΠΈ GUID, Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ хранятся Π² рССстрС ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ COM языки ΠΈΠΌΠ΅ΡŽΡ‚ срСдства для получСния значСния GUID ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM ΠΈ использования Π΅Π³ΠΎ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.