ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (DLL)

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ИспользованиС DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния прилоТСния DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° являСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ интСрфСйсом, Π° Ρ‚Π°ΠΊΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Π±ΠΎΡ€ΠΎΠΌ рСсурсов. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ «ΡƒΡΡ‚ройство» ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ функциями структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ скрыты ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ внСсСнии… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (DLL) (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ
  • ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DLL
  • ИспользованиС рСсурсов
  • ИспользованиС ΠΎΠ±Ρ‰Π΅ΠΉ памяти
  • ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
  • Π’Ρ‹Π²ΠΎΠ΄

Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Microsoft Windows, большая Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы (ОБ) обСспСчиваСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ динамичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (DLL). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡ‚ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Windows, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL. НапримСр, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТится Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… DLL.

Использованию Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ DLL способствуСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ структура ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°, эффСктивноС использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΅ пространства. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, опСрационная систСма ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ быстрСС, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ мСньшС мСста Π½Π° ΠΆΠ΅ΡΡ‚ΠΊΠΎΠΌ дискС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π’Π°ΠΊ ΠΆΠ΅ DLL позволяСт ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡΠ°ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ Π•Π₯Π•-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, достаточно ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ лишь ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ динамичСский ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, доступ ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ сразу ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… исполняСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ.

Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ DLL, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая называСтся Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. ОБ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠΎΠ³Π΄Π° другая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ эту DLL, создаСтся Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ. Всё это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ±ΠΎΡΠΌ Π² ΡΡ‚ΠΈΡ… прилоТСниях ΠΈ ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ, Ρ€Π΅Π·ΠΊΠΎ сниТая ΠΎΠ±Ρ‰ΡƒΡŽ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.

Π‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.net Framework Π±Ρ‹Π»ΠΎ устранСно Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… сборок. ПоздниС вСрсии Windows стали Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий DLL (тСхнология SxS), Ρ‡Ρ‚ΠΎ свСло Π½Π° Π½Π΅Ρ‚ прСимущСства ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

Π’ ΡΡ€Π΅Π΄Π΅ Windows ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΡŽΡ‚ΡΡ Π΄Π²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° связывания:

Β· ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ;

Β· ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΠΎΠ²Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС функция, опрСдСлСнная Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, идСнтифицируСтся ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ — ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΠΎΠ²ΠΎΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ ΠΏΡ€ΠΈ трансляции. БвязываниС ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΠΎΠ²ΠΎΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Π»ΠΎΡΡŒ Π² ΡΡ‚Π°Ρ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Windows Π—. Ρ…, связываниС ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ — Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ.

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

Π’ Π»ΡŽΠ±ΠΎΠΉ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²Ρ…ΠΎΠ΄Π°). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π° Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΊΡƒ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ END (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, END START). ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ автоматичСски вызываСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²Ρ…ΠΎΠ΄Π°. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ ΠΏΡ€ΠΈ этом, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ способом Π½ΠΈ Π±Ρ‹Π»Π° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (явно ΠΈΠ»ΠΈ нСявно), Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ автоматичСски ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ процСсса ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто эта ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° остаСтся пустой. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π²Ρ…ΠΎΠ΄Π° Π² Π½Π΅Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

Β· 1-ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLL-модуля.

Β· 2-ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π°.

Β· 3-ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π Π΅Π·Π΅Ρ€Π².

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π²Ρ…ΠΎΠ΄Π°. Π’ΠΎΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… значСния этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

Β· DLL_PROCESS_DETACH equ 0

Β· DLL_PROCESS_ATTACH equ 1

Β· DLL_THREAD_ATTACH equ 2

Β· DLL_THREAD_DETACH equ 3

DLL_PROCESS_ATTACH — сообщаСт, Ρ‡Ρ‚ΠΎ динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Π² Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠ΅ пространство Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ процСсса.

DLL_THREAD_ATTACH — сообщаСт, Ρ‡Ρ‚ΠΎ Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ процСсс создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Π’Π°ΠΊΠΎΠ΅ сообщСниС посылаСтся всСм динамичСским Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΊ ΡΡ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ процСссом.

DLL_PROCESS_DETACH — сообщаСт, Ρ‡Ρ‚ΠΎ динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° выгруТаСтся ΠΈΠ· Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠ³ΠΎ пространства процСсса.

DLL_THREAD_DETACH — сообщаСт, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, созданный Π΄Π°Π½Π½Ρ‹ΠΌ процСссом, Π² Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠ΅ пространство ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° данная динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, уничтоТаСтся.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ модуля прилоТСния Windows, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ «Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ» DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. И ΡΡ‚ΠΎ понятно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ — ΠΎΠ½ΠΈ слуТат Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… прилоТСниями Π²ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, располоТСнныС Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ….

DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° находится Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π² Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΠΎΠΌ экзСмплярС, содСрТит сСгмСнты ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅ΡΡƒΡ€ΡΡ‹, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ создаСтся ΠΎΠ΄Π½Π° копия состоящая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, состоящий ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅ΡΡƒΡ€ΡΠΎΠ².

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, располоТСнныС Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚СкстС Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΉ ΠΈΡ… Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΡ€ΠΈ этом ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ стСком ΠΊΠΎΠΏΠΈΠΈ прилоТСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ собствСнного стСка Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ.

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

Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ? ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго для экономии памяти, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΡΠΎΡΡ‚Π°Π² своих ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС рСсурсов ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, располоТСнных Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, состоящиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… рСсурсов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ bitmap. Π’ ΡΠΎΡΡ‚Π°Π² Windows Π²Ρ…ΠΎΠ΄ΠΈΡ‚ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° moricons. dll, состоящая ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π€Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ. fon ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, содСрТащиС ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ рСсурса.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, входящиС Π² ΡΠΎΡΡ‚Π°Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈ памяти с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ GMEM_SHARE. Π’Π°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ памяти Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ся автоматичСски ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Windows вСрсии 3.1 всС прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π±Π»ΠΎΠΊΠΈ памяти с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ GMEM_SHARE ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями. Π£ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, располоТСнныС Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Однако Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях Windows ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΠΌ адрСсном пространствС, поэтому для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ динамичСского ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ DDE.

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

ΠžΠ±Π»Π°ΡΡ‚ΡŒ примСнСния DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ достаточно ΡˆΠΈΡ€ΠΎΠΊΠ°. Помимо прСдоставлСния прилоТСниям Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Windows Ρ‚ΠΈΠΏΠ° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ° ΠΈΠ»ΠΈ систСм управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для обСспСчСния ряда систСмных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. НапримСр, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ «ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚» систСмных сообщСний ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈ этом ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ «ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊΠ°» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π² Ρ„иксированном сСгмСнтС ΠΊΠΎΠ΄Π° DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ прСрывания ΠΈΠ»ΠΈ само Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ прСрывания, Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (СдинствСнный способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ — созданиС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°). НаконСц, всС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° устройств Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Windows Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ прСрывания ΠΈ Π½Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ собствСнный Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ подсистСмы большого прилоТСния ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ· ΡΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π΄ΠΎΡΡ‚упности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

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

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ exe-Ρ„Π°ΠΉΠ»Ρƒ вмСстС с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько dll-Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни услоТняСт процСсс установки ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ прилоТСния. ΠœΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ свою DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ нуТная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΅ΡΡ‚ΡŒ Π½Π° Π΄ΠΈΡΠΊΠ΅.

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π±Π΅Π· Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ планирования состава Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π² DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, экономии памяти ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. Π’ Ρ‡Π°ΡΡ‚ности, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° такая ситуация, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ функциями стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ компилятора Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ статичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ.

ЀактичСски, ΠΏΠΎΠ»Π½Ρ‹Ρ… прСимущСств ΠΎΡ‚ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡ DLL ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ явлСния, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ DLL hell («Π°Π΄ DLL»). DLL Hell Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° нСсколько ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅, Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совмСстимыС, вСрсии DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ±ΠΎΡΠΌ Π² ΡΡ‚ΠΈΡ… прилоТСниях. Когда систСма выросла Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², количСство DLL стало ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ тысячи, Π½Π΅ Π²ΡΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ±Π»Π°Π΄Π°Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° DLL Hell стали Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ часто, Ρ€Π΅Π·ΠΊΠΎ пониТая ΠΎΠ±Ρ‰ΡƒΡŽ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ систСмы. ПоздниС вСрсии Microsoft Windows стали Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий DLL, Ρ‡Ρ‚ΠΎ свСло Π½Π° Π½Π΅Ρ‚ прСимущСства ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…

Ѐункция LoadIcon

function LoadIcon (Instance: THandle; IconName: PChar): HIcon;

Π—Π°Π³pΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ pСсуpс ΠΏΠΈΠΊΡ‚ΠΎΠ³pΠ°ΠΌΠΌΡ‹.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· Instance: ЭкзСмпляp модуля, исполнимый Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΎpΠΎΠ³ΠΎ содСpΠΆΠΈΡ‚ ΠΏΠΈΠΊΡ‚ΠΎΠ³pΠ°ΠΌΠΌΡƒ ΠΈΠ»ΠΈ 0 для ΠΏpΠ΅Π΄ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΈΠΊΡ‚ΠΎΠ³pΠ°ΠΌΠΌΡ‹.

Β· IconName: Π‘Ρ‚pΠΎΠΊΠ° ΠΈΠ»ΠΈ имя цСлочислСнного ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎpΠ° ΠΈΠ»ΠΈ ΠΏpΠ΅Π΄ΠΎΠΏpСдСлСнная ΠΏΠΈΠΊΡ‚ΠΎΠ³pΠ°ΠΌΠΌΠ°, ΠΎΠΏpСдСлСнная ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚ idi.

Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pшСния — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎp ΠΏΠΈΠΊΡ‚ΠΎΠ³pΠ°ΠΌΠΌΡ‹; 0 — Π²ΠΏpΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ user32. dll.

Ѐункция LoadLibrary

function LoadLibrary (LibFileName: PChar): THandle;

Π—Π°Π³pΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· LibFileName: Имя Ρ„Π°ΠΉΠ»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ΡΡ пустым символом).

Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pшСния — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎp экзСмпляpΠ° модуля Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, большС 32); Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ мСньшС 32 ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…: (0) Π½Π΅Ρ‚ памяти; (5) ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ; (11) Π½Π΅Π²Π΅pΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» EXE; (12) ΠΏpикладная Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ· OS/2; (13) ΠΏpикладная Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ· DOS 4.0; (14) Π½Π΅Π²Π΅pΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ EXE; (15) Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ pΠ΅ΠΆΠΈΠΌ.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ kernel32. dll.

Ѐункция PostMessage

function PostMessage (Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Bool;

НапpавляСт сообщСниС ΠΎΠΊΠ½Ρƒ ΠΏpΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· Wnd: Окно, ΠΊΠΎΡ‚ΠΎpΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏpΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ сообщСниС, ΠΈΠ»ΠΈ $FFFF для всСх ΠΏΠ΅pΠ΅ΠΊpΡ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ»ΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠΊΠΎΠ½.

Β· Msg: Π’ΠΈΠΏ сообщСния.

Β· wParam: Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈΠ½Ρ„ΠΎpмация ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ.

Β· lParam: Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈΠ½Ρ„ΠΎpмация ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Π½Π΅ Π½ΡƒΠ»ΡŒ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pшСния; 0 — Ссли Π½Π΅Ρ‚.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ user32. dll.

Ѐункция GetModuleHandle

function GetModuleHandle (ModuleName: PChar): THandle;

Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ модуля.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· ModuleName: Имя модуля (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ΡΡ пустым символом).

Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pшСния — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎp модуля; 0 — Π² ΠΏpΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ kernel32. dll.

Ѐункция DialogBoxParam

function DialogBoxParam (Instance, THandle; TemplateName: PChar; Parent: HWnd; DialogFunc: TFarProc; InitParam: Longint): Integer;

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ модального Π΄ΠΈΠ°Π»ΠΎΠ³Π°, ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ TemplateName, ΠΈ ΠΏΠ΅pΠ΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΎΠ±pΠ°ΠΆΠ°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³, посылаСт сообщСниС wm_InitDialog. Π’Π°ΠΊΠΆΠ΅ позволяСт ΠΏΠ΅pΠ΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±pΠ°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°pΠ°ΠΌΠ΅Ρ‚pΠ°.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· Instance: ЭкзСмпляp модуля, исполнимый Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΎpΠΎΠ³ΠΎ содСpΠΆΠΈΡ‚ шаблон Π±Π»ΠΎΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³Π°.

Β· TemplateName: Имя шаблона Π±Π»ΠΎΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³Π° (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ΡΡ пустым символом).

Β· Parent: Окно Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°.

Β· DialogFunc: АдpСс экзСмпляpΠ° ΠΏpΠΎΡ†Π΅Π΄ΡƒpΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π°.

Β· InitParam: ПСpСдаСтся Π² ΠΏΠ°pΠ°ΠΌΠ΅Ρ‚pΠ΅ lParam сообщСния wm_InitDialog.

Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ΠΏΠ°pΠ°ΠΌΠ΅Ρ‚p nResult Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ EndDialog; - 1 — Ссли Π΄ΠΈΠ°Π»ΠΎΠ³ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ user32. dll.

Ѐункция ExitProcess

function ExitProcess (uExitCode);

Π—Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ процСсс со Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ (ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ).

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

Β· uExitCode ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° для процСсса, ΠΈ Π΄Π»Ρ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Ρƒ ΡΡ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

Ѐункция FreeLibrary

function FreeLibrary (LibModule: THandle);

Π”Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ LibModule ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π½ΠΈΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ссли ΠΌΠΎΠ΄ΡƒΠ»ΡŒ большС Π½Π΅ Π°Π΄pСсуСтся.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· LibModule: Π—Π°Π³pΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Ссли функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½ΡƒΠ»ΡŒ. Если функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ равняСтся Π½ΡƒΠ»ΡŽ.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ kernel32. dll.

Ѐункция EndDialog

function EndDialog (Dlg: Hwnd; Result: Integer);

Π’Π΅pΠΌΠΈΠ½ΠΈpΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΠ°pΠ°ΠΌΠ΅Ρ‚pΠΎΠΌ esult, Π²ΠΎΠ·Π²pащаСтся Π² ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DialogBox.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· Dlg: Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³.

Β· Result: Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Ссли функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ Π½ΡƒΠ»Ρ. Если функция Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ user32. dll

Ѐункция GetProcAddress

function GetProcAddress (Module: THandle; ProcName: PChar): TFarProc;

Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Π°Π΄pСс экспоpΡ‚ΠΈpΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· Module: Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Β· ProcName: Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ΡΡ пустым символом) ΠΈΠ»ΠΈ ΠΏpоизвольноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pшСния — Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ; 0 — Π² ΠΏpΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ kernel32. dll.

Ѐункция MessageBox

function MessageBox (Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer;

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ ΠΎΡ‚ΠΎΠ±pΠ°ΠΆΠ°Π΅Ρ‚ Π±Π»ΠΎΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³Π°, содСpΠΆΠ°Ρ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ сообщСниС ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏpΠ΅Π΄ΠΎΠΏpΠ΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΈΠΊΡ‚ΠΎΠ³pΠ°ΠΌΠΌΡ‹ ΠΈ Ρ‚СкстовыС ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠ°pΠ°ΠΌΠ΅Ρ‚pΠΎΠΌ TexType.

ПаpΠ°ΠΌΠ΅Ρ‚pΡ‹:

Β· Parent: Окно, Π²Π»Π°Π΄Π΅ΡŽΡ‰Π΅Π΅ Π±Π»ΠΎΠΊΠΎΠΌ сообщСний.

Β· Txt: ΠžΡ‚ΠΎΠ±pΠ°ΠΆΠ°Π΅ΠΌΠΎΠ΅ сообщСниС (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ΡΡ пустым символом).

Β· Caption: Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π±Π»ΠΎΠΊΠ° Π΄ΠΈΠ°Π»ΠΎΠ³Π° (Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ пустым символом) ΠΈΠ»ΠΈ nil для «Error» («ΠžΡˆΠΈΠ±ΠΊΠ°»).

Β· TextType: Одна ΠΈΠ»ΠΈ комбинация констант mb.

Π’ΠΎΠ·Π²pΠ°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅pшСния ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… констант: id_Abort, id_Cancel, id_Ignore, id_No, id_OK, id_Retry ΠΈΠ»ΠΈ id_Yes.

Ѐункция находится Π² Ρ„Π°ΠΉΠ»Π΅ user32. dll.

Ѐункция Invoke

function Invoke (имя API Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹): Integer;

Данная функция ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ΡΡ‚Π΅ΠΊ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ API Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows:

Β· WM_SETICON — ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ посылаСт ΠΎΠΊΠ½Ρƒ Π΄Π°Π½Π½ΠΎΠ΅ сообщСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠΊΠΎΠ½ΠΊΡƒ (Π·Π½Π°Ρ‡ΠΎΠΊ).

Β· WM_CLOSE — Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, приходящСС Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ. ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ WM_DESTROY. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ DefWindowProc, EndDialog ΠΈΠ»ΠΈ WindowsDestroy ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ появлСниС сообщСния WM_DESTROY.

Β· WM_INITDIALOG — Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, приходящСС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° вмСсто сообщСния WM_CREATE.

Β· WM_LBUTTONDOWN — Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ гСнСрируСтся ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DLL

Π―Π²Π½ΠΎΠ΅ связываниС

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Π½Π°Ρ‡Π°Π»Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ LoadLibrary. Π—Π°Ρ‚Π΅ΠΌ опрСдСляСтся адрСс ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetProcAddress, послС Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ². Как ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, MASM ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ вмСсто DLLP1 имя _DLLP1@0, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ TASM ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ имя Π±Π΅Π· искаТСния. Π­Ρ‚ΠΎ учитываСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

dll1. asm:

.386P

. MODEL FLAT, stdcall

option casemap: none

; - ————————————————————————

PUBLIC DLLP1

; константы

; сообщСния, приходящиС ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ

; динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

DLL_PROCESS_DETACH equ 0

DLL_PROCESS_ATTACH equ 1

DLL_THREAD_ATTACH equ 2

DLL_THREAD_DETACH equ 3

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ————————————————————————;

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

TEXT1 DB 'Π’Ρ…ΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ', 0

TEXT2 DB 'Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

MS DB 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

TEXT DB 'Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ· DLL', 0

; - ————————————————————————;

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

; [EBP+10H]; Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

; [EBP+0CH]; ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π°

; [EBP+8]; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLL-модуля

DLLENTRY:

MOV EAX, DWORD PTR [EBP+0CH]

CMP EAX, 0

JNE D1

; Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

invoke MessageBox, 0, OFFSET TEXT2, OFFSET MS, 0

JMP _EXIT

D1:

CMP EAX, 1

JNE _EXIT

; ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

invoke MessageBox, 0, OFFSET TEXT1, OFFSET MS, 0

_EXIT:

MOV EAX, 1

RET 12

; - —————————

; [EBP+8]; ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

DLLP1 PROC EXPORT

PUSH EBP

MOV EBP, ESP

CMP DWORD PTR [EBP+8], 1

JNE _EX

invoke MessageBox, 0, OFFSET TEXT, OFFSET MS, 0

_EX:

POP EBP

RET 4

DLLP1 ENDP

END DLLENTRY

dllex. asm:

.386P

; плоская модСль

. MODEL FLAT, stdcall

option casemap: none

; - ————————————————————————

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ————————————————————

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

TXT DB 'Ошибка динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

MS DB 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅', 0

LIBR DB 'DLL1. DLL', 0

HLIB DD?

NAMEPROC DB '_DLLP1@0', 0

; - ————————————————————

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

START:

; Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

invoke LoadLibrary, OFFSET LIBR

CMP EAX, 0

JE _ERR

MOV HLIB, EAX

; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

invoke GetProcAddress, HLIB, OFFSET NAMEPROC

CMP EAX, 0

JNE YES_NAME

; сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅

_ERR:

invoke MessageBox, 0, OFFSET TXT, OFFSET MS, 0

JMP _EXIT

YES_NAME:

PUSH 1; ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

CALL EAX

; Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

invoke FreeLibrary, HLIB

; Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° автоматичСски закрываСтся Ρ‚Π°ΠΊΠΆΠ΅

; ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

; Π²Ρ‹Ρ…ΠΎΠ΄

_EXIT:

invoke ExitProcess, 0

END START

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Рисунок 1

НСявноС связываниС.

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΊΠ°ΠΊ внСшнюю, Π°, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ DLLP1. LIB.

dll1. asm:

.386P

. MODEL FLAT, stdcall

option casemap: none

; - ————————————————————————

PUBLIC DLLP1

; константы

; сообщСния, приходящиС ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ

; динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

DLL_PROCESS_DETACH equ 0

DLL_PROCESS_ATTACH equ 1

DLL_THREAD_ATTACH equ 2

DLL_THREAD_DETACH equ 3

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ————————————————————————;

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

TEXT1 DB 'Π’Ρ…ΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ', 0

TEXT2 DB 'Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

MS DB 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

TEXT DB 'Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ· DLL', 0

; - ————————————————————————;

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

; [EBP+10H]; Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

; [EBP+0CH]; ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π°

; [EBP+8]; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLL-модуля

DLLENTRY:

MOV EAX, DWORD PTR [EBP+0CH]

CMP EAX, 0

JNE D1

; Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

invoke MessageBox, 0, OFFSET TEXT2, OFFSET MS, 0

JMP _EXIT

D1:

CMP EAX, 1

JNE _EXIT

; ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

invoke MessageBox, 0, OFFSET TEXT1, OFFSET MS, 0

_EXIT:

MOV EAX, 1

RET 12

; - —————————

; [EBP+8]; ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

DLLP1 PROC EXPORT

PUSH EBP

MOV EBP, ESP

CMP DWORD PTR [EBP+8], 1

JNE _EX

invoke MessageBox, 0, OFFSET TEXT, OFFSET MS, 0

_EX:

POP EBP

RET 4

DLLP1 ENDP

END DLLENTRY

dllex. asm:

.386P

; плоская модСль

. MODEL FLAT, stdcall

option casemap: none

; - ————————————————————————

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

includelib dll1. lib

EXTERN DLLP1@0: NEAR

; - ——————————————————————————

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

; - ——————————————————————————

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

START:

PUSH 1

CALL DLLP1@0

; Π²Ρ‹Ρ…ΠΎΠ΄

_EXIT:

invoke ExitProcess, 0

END START

Как Π²ΠΈΠ΄Π½ΠΎ, тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стал нСсколько ΠΏΡ€ΠΎΡ‰Π΅.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Рисунок 2

ИспользованиС рСсурсов

Основной процСсс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ рСсурсы Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ ΠΈΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π½Π°Ρ‡Π°Π»Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈΠΊΠΎΠ½ΠΊΡƒ ΠΈΠ· Ρ€Π΅ΡΡƒΡ€ΡΠΎΠ² динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π½Π° ΠΎΠΊΠ½ΠΎ. Если Ρ‰Π΅Π»ΠΊΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ, Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² курсор Π½Π° ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½, Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π½Π°Ρ‡ΠΎΠΊ Π½Π° ΠΎΠΊΠ½ΠΎ.

dll3. asm:

.386P

PUBLIC SETIC

. MODEL FLAT, stdcall

option casemap: none

; - ————————————————————————

; константы

WM_SETICON equ 80h

; ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ————————————————————————

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

PRIZ DB 0

; - ————————————————————————

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

DLLENTRY:

MOV EAX, 1

RET 12

; [EBP+8]

; [EBP+0CH]

SETIC PROC EXPORT

PUSH EBP

MOV EBP, ESP

; Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠΊΠΎΠ½ΠΊΡƒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ

CMP PRIZ, 0

JZ IC1

MOV PRIZ, 0

invoke LoadIcon, DWORD PTR [EBP+0CH], 3

JMP CONT

IC1:

MOV PRIZ, 1

invoke LoadIcon, DWORD PTR [EBP+0CH], 10

CONT:

; Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠΊΠΎΠ½ΠΊΡƒ ΠΈΠ· Ρ€Π΅ΡΡƒΡ€ΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

; ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ ΠΎΠΊΠ½Π°

invoke PostMessage, DWORD PTR [EBP+08H], WM_SETICON, 0, EAX

POP EBP

RET 8

SETIC ENDP

END DLLENTRY

dllex3. asm:

.386P

; плоская модСль

. MODEL FLAT, stdcall

option casemap: none

; - ———————————————————————;

; константы

; сообщСниС ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΎΠΊΠ½Π°

WM_CLOSE equ 10h

WM_INITDIALOG equ 110h

WM_SETICON equ 80h

WM_LBUTTONDOWN equ 201h

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

Procedura Proto

; - ———————————————————————;

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

LIBR DB 'DLL3. DLL', 0

HLIB DD?

HINST DD?

PA DB «DIAL1», 0

NAMEPROC DB «_SETIC@0», 0

; - ———————————————————————;

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

START:

; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ дСскриптор прилоТСния

invoke GetModuleHandle, 0

; ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³

MOV [HINST], EAX

invoke DialogBoxParam, [HINST], OFFSET PA, 0, OFFSET Procedura, 0

_EXIT:

invoke ExitProcess, 0

; ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠΊΠ½Π°

; располоТСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΡΡ‚Π΅ΠΊΠ΅

; [EBP+014Н]; LPARAM

; [EBP+10Н]; WAPARAM

; [EBP+0CH]; MES

; [EBP+8]; HWND

Procedura PROC

PUSH EBP

MOV EBP, ESP

PUSH EBX

PUSH ESI

PUSH EDI

; - —————————

CMP DWORD PTR [EBP+0CH], WM_CLOSE

JNE L1

; Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

; Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° автоматичСски закрываСтся Ρ‚Π°ΠΊΠΆΠ΅

; ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

invoke FreeLibrary, HLIB

invoke EndDialog, DWORD PTR [EBP+08H], 0

JMP FINISH

L1:

CMP DWORD PTR [EBP+0CH], WM_INITDIALOG

JNE L2

; Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

invoke LoadLibrary, OFFSET LIBR

MOV HLIB, EAX

; Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠΊΠΎΠ½ΠΊΡƒ

invoke LoadIcon, [HLIB], 3

; ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠΊΠΎΠ½ΠΊΡƒ

invoke PostMessage, DWORD PTR [EBP+08H], WM_SETICON, 0, EAX

JMP FINISH

L2:

CMP DWORD PTR [EBP+0CH], WM_LBUTTONDOWN

JNE FINISH

; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

invoke GetProcAddress, HLIB, OFFSET NAMEPROC

; Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ с Π΄Π²ΡƒΠΌΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

PUSH [HLIB]

PUSH DWORD PTR [EBP+08H]

CALL EAX

FINISH:

POP EDI

POP ESI

POP EBX

POP EBP

MOV EAX, 0

RET 16

Procedura ENDP

END START

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° рСсурс связываниС Рисунок 3

ИспользованиС ΠΎΠ±Ρ‰Π΅ΠΉ памяти

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

dll4. asm:

; динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° DLL4. ASM

.386P

; плоская модСль

. MODEL FLAT, stdcall

option casemap: none

PUBLIC DLLP1

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ————————————————————————;

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

TEXT DB «Π’ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅», 0

MS DB «Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅», 0

; - ————————————————————————;

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

; [EBP+10H]; Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

; [EBP+0CH]; ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π°

; [EBP+8]; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLL-модуля

DLLENTRY:

MOV EAX, 1

RET 12

; - ————————————————————————;

; адрСса ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

DLLP1 PROC EXPORT

PUSH EBP

MOV EBP, ESP

invoke MessageBox, 0, OFFSET TEXT, OFFSET MS, 0

; ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ строку, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π² Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ памяти

MOV TEXT,'И'

MOV TEXT+1,'Π·'

MOV TEXT+2, ' '

POP EBP

RET

DLLP1 ENDP

END DLLENTRY

dllex4. asm:

; основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ DLLEX4. ASM, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ

; ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

.386P

; плоская модСль

. MODEL FLAT, stdcall

option casemap: none

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ————————————————;

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

TXT DB 'Ошибка динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

MS DB 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅', 0

LIBR DB 'DLL4. DLL', 0

HLIB DD?

NAMEPROC DB '_DLLP1@0', 0

; - ————————————————;

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

; [EBP+10H]; Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

; [EBP+0CH]; ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π°

; [EBP+8]; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLL-модуля

START:

; Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

invoke LoadLibrary, OFFSET LIBR

CMP EAX, 0

JE _ERR

MOV HLIB, EAX

; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс

invoke GetProcAddress, HLIB, OFFSET NAMEPROC

CMP EAX, 0

JNE YES_NAME

; сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅

_ERR:

invoke MessageBox, 0, OFFSET TXT, OFFSET MS, 0

JMP _EXIT

YES_NAME:

CALL EAX

invoke MessageBox, 0, OFFSET MS, OFFSET MS, 0

; Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

; Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° автоматичСски закрываСтся Ρ‚Π°ΠΊΠΆΠ΅

; ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

invoke FreeLibrary, HLIB

; Π²Ρ‹Ρ…ΠΎΠ΄

_EXIT:

invoke ExitProcess, 0

END START

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Рисунок 4

Рисунок 5

Рисунок 6

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π—Π΄Π΅ΡΡŒ дСмонстрируСтся, Ρ‡Ρ‚ΠΎ основной процСсс ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ адрСсноС пространство. ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ адрСса строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… основного процСсса. Π’ ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ процСсс адрСс строки, находящСйся Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

dll2. asm:

; динамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° DLL2. ASM

.386P

; плоская модСль

. MODEL FLAT, stdcall

option casemap: none

; - ————————————————————————

PUBLIC DLLP1

; константы

; сообщСния, приходящиС ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ

; динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

DLL_PROCESS_DETACH equ 0

DLL_PROCESS_ATTACH equ 1

DLL_THREAD_ATTACH equ 2

DLL_THREAD_DETACH equ 3

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ————————————————————————;

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

TEXT DB «Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅», 0

; - ————————————————————————;

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

; [EBP+10H]; Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

; [EBP+0CH]; ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π°

; [EBP+8]; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLL-модуля

DLLENTRY:

MOV EAX, DWORD PTR [EBP+0CH]

CMP EAX, 0

JNE D1

; Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

JMP _EXIT

D1:

CMP EAX, 1

JNE _EXIT

; ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

_EXIT:

MOV EAX, 1

RET 12

; - ——————————

; адрСса ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

; [EBP+8]

; [EBP+0CH]

DLLP1 PROC EXPORT

PUSH EBP

MOV EBP, ESP

invoke MessageBox, 0, DWORD PTR [EBP+8], DWORD PTR [EBP+0CH], 0

POP EBP

LEA EAX, TEXT

RET 8

DLLP1 ENDP

END DLLENTRY

dllex2. asm:

; основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ DLLEX2. ASM, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ

; ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

.386P

; плоская модСль

. MODEL FLAT, stdcall

option casemap: none

; - ————————————————————————

; Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

includelib user32. lib

includelib kernel32. lib

include windows. inc

include kernel32. inc

include user32. inc

; - ——————————————————————;

; сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

. data

TXT DB 'Ошибка динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

MS DB 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅', 0

LIBR DB 'DLL2. DLL', 0

HLIB DD?

MS1 DB 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ', 0

TEXT DB 'Π‘Ρ‚Ρ€ΠΎΠΊΠ° содСрТится Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅', 0

NAMEPROC DB '_DLLP1@0', 0

; - ——————————————————————;

; сСгмСнт ΠΊΠΎΠ΄Π°

. code

; [EBP+10H]; Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

; [EBP+0CH]; ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π°

; [EBP+8]; ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ DLL-модуля

START:

; Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

invoke LoadLibrary, OFFSET LIBR

CMP EAX, 0

JE _ERR

MOV HLIB, EAX

; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс

invoke GetProcAddress, HLIB, OFFSET NAMEPROC

CMP EAX, 0

JNE YES_NAME

; сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅

_ERR:

invoke MessageBox, 0, OFFSET TXT, OFFSET MS, 0

JMP _EXIT

YES_NAME:

PUSH OFFSET MS1

PUSH OFFSET TEXT

CALL EAX

invoke MessageBox, 0, EAX, OFFSET MS, 0

; Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ

invoke FreeLibrary, HLIB

; Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° автоматичСски закрываСтся Ρ‚Π°ΠΊΠΆΠ΅

; ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

; Π²Ρ‹Ρ…ΠΎΠ΄

_EXIT:

invoke ExitProcess, 0

END START

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Рисунок 7

Рисунок 8

Π’Ρ‹Π²ΠΎΠ΄

Π’ Ρ…ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ освСщСны основы 32-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ программирования Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Assembler для ΠžΠ‘ WINDOWS.

Π’ΠΎ Π²ΡΠ΅Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… для Π²Ρ‹Π·ΠΎΠ²Π° API Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция invoke, которая позволяСт Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ ассСмблСра ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π―Π’Π£

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ MASM, ОБ Windows 7 SP2 x64.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ