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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ DLL. 
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ провСдСния тСстов

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

Π’ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вашС Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ, VCL провСряСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ свойства FormStyle Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ прилоТСния. Однако Π² Π½Π°ΡˆΠ΅ΠΌ случаС всС Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π²Π΅Ρ€Π½ΠΎ. Π’Π°ΠΊ Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ Π΄Π΅Π»ΠΎ? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, рассматриваСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Application, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π° ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Ну, ΠΈ Π΅ΡΡ‚СствСнно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² DLL Π½Π΅Ρ‚… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ DLL. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ провСдСния тСстов (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎ ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Российской Π€Π΅Π΄Π΅Ρ€Π°Ρ†ΠΈΠΈ ВюмСнский ГосударствСнный УнивСрситСт Π˜Π½ΡΡ‚ΠΈΡ‚ΡƒΡ‚ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ ЕстСствСнных Наук ΠΈ Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠšΠ°Ρ„Π΅Π΄Ρ€Π° ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡ ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅ΠΌΡƒ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ DLL. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ провСдСния тСстов Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»:

студСнт 304−1 Π³Ρ€. Василий Коляка ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»:

Π‘Ρ‚ΡƒΠΏΠ½ΠΈΠΊΠΎΠ² АндрСй ΠΠ½Π°Ρ‚ΠΎΠ»ΡŒΠ΅Π²ΠΈΡ‡ ВюмСнь 2012

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
    • Π“Π»Π°Π²Π° 1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ DLL

1.1 АргумСнты Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ использования DLL

1.2 ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ DLL

1.3 Экспорт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· DLL

1.4 ИспользованиС DLLProc

1.5 Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· DLL

  • Π“Π»Π°Π²Π° 2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
    • 2.1 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ
      • 2.2 ОписаниС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
      • 2.3 Π‘Π»ΠΎΠΊ схСмы
      • 2.4 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
      • 2.5 БистСмныС трСбования
      • 2.6 Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Если ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows, Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠΈ динамичСских подсоСдиняСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (dynamic link libraries — DLL). Достаточно Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΡΠΏΠΈΡΠΎΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ², располоТСнных Π² ΡΠΈΡΡ‚Π΅ΠΌΠ½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Windows — ΠΏΠΎΡ€ΠΎΠΉ количСство ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ достигаСт Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сотСн. DLL ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ функционирования ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм сСмСйства Microsoft Windows. Однако для вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠœΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… функционирования DLL ΠΈ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ создания Π²Π°ΡˆΠΈΡ… собствСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π¦Π΅Π»ΠΈ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹:

1. ВСорСтичСскоС ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ DLL

2. НаписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для провСдСния тСстирований Π—Π°Π΄Π°Ρ‡ΠΈ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹:

1. Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL

2. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ 2 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ тСстов ΠΈ Ρ‚СстСр (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, нСпосрСдствСнно проводящая тСсты)

Π“Π»Π°Π²Π° 1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ DLL

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

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

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, содСрТащиСся Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π° Ρ‚ΠΈΠΏΠ°: Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Screen.Cursors[myCursor] := LoadCursor (HInstance, MYCURSOR');

LoadCursor — функция Windows API, которая вызываСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ User 32.dll. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ рСсурсов ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠ΅ стандартныС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ Windows, ΠΊΠ°ΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³ открытия Ρ„Π°ΠΉΠ»Π°, Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΈΠ»ΠΈ настройки ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°. Π­Ρ‚ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ находятся Π² Ρ„Π°ΠΉΠ»Π΅ Comctl32.dll. Однако ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΠΎΡ€ΠΌ этих Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ², ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡΡΡŒ, Π³Π΄Π΅ хранится ΠΈΡ… ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ — это Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ самого Ρ„Π°ΠΉΠ»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

1.1 АргумСнты Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ использования DLL

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ структуры динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚Π΅Ρ… прСимущСствах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°. Π”ΡƒΠΌΠ°ΡŽ, Π½Π΅Ρ‚ нСобходимости ΠΏΠΎΡΡΠ½ΡΡ‚ΡŒ удобство использования ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈ создании Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π²Ρ‹ ΡΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΡΠ²ΠΎΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°Ρ исходных ΠΊΠΎΠ΄ΠΎΠ². А Ρ‡Π΅ΠΌ Ρ‚ΠΎΠ³Π΄Π° это Π»ΡƒΡ‡ΡˆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², спроситС Π²Ρ‹? А Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, хранящиСся Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π½Π° Object Pascal, Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ C++Builder, Visual Basic, Visual C++ ΠΈ Ρ‚. Π΄. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½ΠΎ ΡΡ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π—Π²ΡƒΡ‡ΠΈΡ‚ Π·Π°ΠΌΠ°Π½Ρ‡ΠΈΠ²ΠΎ? МнС каТСтся, Π΄Π°ΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ. Но ΡΡ‚ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Π²ΡΠ΅.

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

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, слСдуСт ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π²ΠΎΡ‚ ΠΎ Ρ‡Π΅ΠΌ. ВсСго нСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ распространСния Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ вашСй страны. Π― Ρ…ΠΎΡ‡Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки тСкста Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ… управлСния (ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню, ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ списки, подсказки), сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ Ρ‚. Π΄. Π½Π΅ ΡΡ‚ояла Ρ‚Π°ΠΊ остро, ΠΊΠ°ΠΊ сСйчас. Однако, с ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡ‚Π½Ρ‹ΠΌ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Ρƒ Π²Π°Ρ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстрой ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² практичСски Π² Π»ΡŽΠ±ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΌΠΈΡ€Π°. И Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ с Π²Π°ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Арабских Π­ΠΌΠΈΡ€Π°Ρ‚Π°Ρ…, Ссли ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎ-русски, ΠΎΠ½Π° с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚? Π’Ρ‹ ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ этот эффСкт, Ссли Ρ…ΠΎΡ‚ΡŒ Ρ€Π°Π· Π½Π° ΡΠΊΡ€Π°Π½Π΅ вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° вмСсто с Π΄Π΅Ρ‚ства Π·Π½Π°ΠΊΠΎΠΌΠΎΠ³ΠΎ русского языка появляСтся «Π°Ρ€Π°Π±ΡΠΊΠ°Ρ вязь» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·-Π·Π° «ΡΠ±ΠΎΡ» ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²). Π˜Ρ‚Π°ΠΊ, ΡƒΠΆΠ΅ сСйчас Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ распространСния Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… странах (Ссли, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρƒ Π²Π°Ρ Π΅ΡΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС ΠΏΡ€ΠΈΠ±Ρ‹Π»ΠΈ). БоотвСтствСнно, встаСт вопрос быстрого ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° интСрфСйса вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки. Одним ΠΈΠ· ΠΏΡƒΡ‚Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ созданиС рСсурсов интСрфСйсов Π²Π½ΡƒΡ‚Ρ€ΠΈ DLL. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²Π΅Ρ€ΡΠΈΠΈ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСния Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках.

ЕстСствСнно, Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ использования динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π˜Ρ‚Π°ΠΊ, надСюсь, Π²Ρ‹ Π²ΡΠ΅ Π΅Ρ‰Π΅ заинтСрСсованы Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ, собствСнно, DLL ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ. Если Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄.

1.2 ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ DLL

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚авляСт собой Π½Π΅ΠΊΠΈΠΉ свСрхслоТный процСсс, доступный лишь ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹ΠΌ. Если Π²Ρ‹ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Object Pascal, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ особого Ρ‚Ρ€ΡƒΠ΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ DLL. Π˜Ρ‚Π°ΠΊ, рассмотрим Ρ‚Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ создания DLL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ, Π° Π² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Как ΠΈ Π»ΡŽΠ±ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ фиксированный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. ВзглянитС Π½Π° Π»ΠΈΡΡ‚ΠΈΠ½Π³, прСдставлСнный Π½ΠΈΠΆΠ΅.

library MyFirstDLL;

uses

SysUtils,

Classes,

Forms,

Windows;

procedure HelloWorld (AForm: TForm);

begin

MessageBox (AForm.Handle, Hello world!',

DLL Message Box', MB_OK or MB_ICONEXCLAMATION);

end;

exports

HelloWorld;

begin

end.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Π½Π° Ρ‡Ρ‚ΠΎ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово library, находящССся Π²Π²Π΅Ρ€Ρ…Ρƒ страницы. Library опрСдСляСт этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL. Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, содСрТащСй Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ: HelloWorld. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΠΎ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚личаСтся ΠΎΡ‚ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово exports сигнализируСт компилятору ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ пСрСчислСнныС Π½ΠΈΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ/ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Ρ‚.Π΅. ΠΎΠ½ΠΈ ΠΊΠ°ΠΊ Π±Ρ‹ «ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ» ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ экспорта ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π² ΠΊΠΎΠ½Ρ†Π΅ модуля ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова begin ΠΈ end. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Достаточно часто этот Π±Π»ΠΎΠΊ остаСтся пустым.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, всС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π² DLL, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π΄Π²Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹: экспортируСмыС (Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ) ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅. ЕстСствСнно, Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ описаны классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π½Π° ΡΡ‚ΠΎΠΌ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ. ОписаниС ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ DLL, Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΈΡ… Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…-прилоТСниях. Π˜Ρ… ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ лишь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступа. Она просто Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± ΠΈΡ… ΡΡƒΡ‰Π΅ΡΡ‚вования, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΈ классы Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎ Ρ‚Π΅Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ описаны Π² ΡΠ΅ΠΊΡ†ΠΈΠΈ private Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌ ΠΈ Ρ„ункциям, DLL ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ для всСх ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Для 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ эти Π΄Π°Π½Π½Ρ‹Π΅ сущСствовали Π² Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΠΎΠΌ экзСмплярС нСзависимо ΠΎΡ‚ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° измСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a Π½Π° 100, Ρ‚ΠΎ Π΄Π»Ρ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ a Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 100. Для 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ это Π½Π΅ Ρ‚Π°ΠΊ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прилоТСния создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ копия глобальной области Π΄Π°Π½Π½Ρ‹Ρ….

1.3 Экспорт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· DLL

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

НаиболСС распространСнный способ экспорта — ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. ВзглянСм Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ тСкст:

exports

SayHello,

DoSomething,

DoSomethingReallyCool;

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Delphi автоматичСски Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ порядковый Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ экспортируСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅) нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, опрСдСляСтС Π²Ρ‹ Π΅Π³ΠΎ явно ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π―Π²Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ индСкса позволяСт Π²Π°ΠΌ Π»ΠΈΡ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ порядковым Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ экспортируСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ выполняСтся Π»ΠΈ ваш ΠΊΠΎΠ΄Π΅ΠΊ Π² DLL ΠΈΠ»ΠΈ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ IsLibrary. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΊΠΎΠ΄ вызываСтся ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ false Π² ΡΠ»ΡƒΡ‡Π°Π΅ выполнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния. ΠšΡ€ΠΎΠΌΠ΅ этого, Π² ΠΏΠΎΡΡ‚Π°Π²ΠΊΡƒ Delphi Π²Ρ…ΠΎΠ΄ΠΈΡ‚ вСсьма полСзная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° tdump, которая прСдоставляСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚ΠΎΠΌ, какая информация экспортируСтся ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ DLL.

1.4 ИспользованиС DLLProc

Π’Ρ‹ΡˆΠ΅ я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² Π±Π»ΠΎΠΊ begin… end. Однако ΠΊΡ€ΠΎΠΌΠ΅ этого Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия, выполняСмыС Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ DLL ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ DLL Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈ ΡΠ΅ΠΊΡ†ΠΈΠΈ initialization, Π½ΠΈ ΡΠ΅ΠΊΡ†ΠΈΠΈ finalization. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ динамичСски Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Π³Π»Π°Π²Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΠ½ΡΡ‚Π½ΠΎ, Π³Π΄Π΅ эта ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ освобоТдСна. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сущСствуСт DLLProc — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, вызываСмая Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ функционирования DLL. Для Π½Π°Ρ‡Π°Π»Π° слСдуСт ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΡΠ°ΠΌΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ сущСствования DLLProc. ДинамичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΎΡ‚ Windows Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ своСй Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ процСсс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ/ΠΈΠ»ΠΈ рСсурсы, хранящиСся Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, загруТаСтся Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Вакая ситуация Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для функционирования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. А Π΄Π»Ρ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, которая ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ отвСтствСнна Π·Π° Ρ‚Π°ΠΊΠΈΠ΅ дСйствия. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

procedure MyFirstDLLProc (Reason: Integer);

begin

if Reason = DLL_PROCESS_DETACH then

{DLL is unloading. Cleanup code here.}

end;

Однако систСмС ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° MyFirstDllProc отвСтствСнна Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ рассмотрСнных Π²Ρ‹ΡˆΠ΅ ситуаций. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠΎΠΎΡ‚вСтствиС адрСс нашСй ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ DLLProc. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ΅ begin… end ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

begin

DLLProc := @MyDLLProc;

{ Π§Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ }

end.

НиТС прСдставлСн ΠΊΠΎΠ΄, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния DLLProc.

library MyFirstDLL;

uses

SysUtils,

Classes,

Forms,

Windows;

var

SomeBuffer: Pointer;

procedure MyFirstDLLProc (Reason: Integer);

begin

if Reason = DLL_PROCESS_DETACH then

{DLL is Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ся ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ.

ОсвобоТдаСм ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄ Π±ΡƒΡ„Π΅Ρ€.}

FreeMem (SomeBuffer);

end;

procedure HelloWorld (AForm: TForm);

begin

MessageBox (AForm.Handle, Hello world!',

DLL Message Box', MB_OK or MB_ICONEXCLAMATION);

end;

{Какой-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ SomeBuffer.}

exports

HelloWorld;

begin

{Π‘Ρ‚Π°Π²ΠΈΠΌ Π² ΡΠΎΠΎΡ‚вСтствиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

DLLProc адрСс нашСй ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.}

DLLProc := @MyFirstDLLProc;

SomeBuffer := AllocMem (1024);

end.

Как ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ события, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вызываСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° MyFirstDll, являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Reason. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

DLL_PROCESS_DETACH — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° выгруТаСтся ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·;

DLL_THREAD_ATTACH — Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ загруТаСтся Π½ΠΎΠ²Ρ‹ΠΉ процСсс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ рСсурсы ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ;

DLL_THREAD_DETACH — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, «Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ся» ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° DLL

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ использованиС ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, находящСйся Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ DLL Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ осущСствлСна ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… способов: статичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°. Оба ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠ°ΠΊ прСимущСства, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠΈ.

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

Бмысл динамичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π½Π΅ ΠΏΡ€ΠΈ стартС прилоТСния, Π° Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π‘Π°ΠΌΠΈ посудитС, вСдь Ссли функция, описанная Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ 10% запусков ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅Ρ‚ смысла ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ‚Π°ΠΊΠΆΠ΅ осущСствляСтся ΠΏΠΎΠ΄ вашим ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ прСимущСства Ρ‚Π°ΠΊΠΎΠ³ΠΎ способа Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ DLL — это ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ (ΠΏΠΎ ΠΏΠΎΠ½ΡΡ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ старта вашСго прилоТСния. А ΠΊΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ Ρƒ ΡΡ‚ΠΎΠ³ΠΎ способа ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ нСдостатки? Основной, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, — это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ использованиС Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся Π±ΠΎΠ»Π΅Π΅ Ρ…Π»ΠΎΠΏΠΎΡ‚Π½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ рассмотрСнная Π²Ρ‹ΡˆΠ΅ статичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°. Π‘Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Windows API LoadLibrary. Для получСния указатСля Π½Π° ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функция GetProcAddress. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ΅Π½Π° с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ FreeLibrary.

1.5 Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· DLL

Бпособ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ эти ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ находятся.

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΠ· ΡΡ‚атичСски Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… DLL достаточно прост. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ описаниС экспортируСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹). ПослС этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ описаны Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ вашСго прилоТСния. Для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, содСрТащСйся Π² DLL, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ external Π² ΠΈΡ… ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для рассмотрСнной Π½Π°ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ HelloWorld Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка:

procedure SayHello (AForm: TForm); external myfirstdll. dll';

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово external сообщаСт компилятору, Ρ‡Ρ‚ΠΎ данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ (Π² Π½Π°ΡˆΠ΅ΠΌ случаС — myfirstdll. dll). Π”Π°Π»Π΅Π΅ Π²Ρ‹Π·ΠΎΠ² этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

HelloWorld (self);

ΠŸΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π±ΡƒΠ΄ΡŒΡ‚Π΅ особСнно Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΏΡ€ΠΈ написании ΠΈΡ… ΠΈΠΌΠ΅Π½ ΠΈ ΠΈΠ½Ρ‚СрфСйсов! Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ компиляции прилоТСния Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², экспортируСмых ΠΈΠ· DLL, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ описали ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрировано Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡΡ‚Π°ΠΏΠ΅ выполнСния прилоТСния.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈΠ· DLL ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), порядковому Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΈΠ»ΠΈ с ΠΏΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Π²Ρ‹ ΠΏΡ€ΠΎΡΡ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ имя ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ (ΠΌΡ‹ ΡΡ‚ΠΎ рассмотрСли Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅). Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΠΎΠ²ΠΎΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ Π²Π°Ρ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ этого самого Π½ΠΎΠΌΠ΅Ρ€Π°:

procedure HelloWorld (AForm: TForm);

external myfirstdll. dll' index 15;

Π’ ΡΡ‚ΠΎΠΌ случаС имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π΄Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ для Π½Π΅Π΅ Π² ΡΠ°ΠΌΠΎΠΉ DLL. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ запись ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ myfirstdll. dll ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, которая ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ пятнадцатой, ΠΈ ΠΏΡ€ΠΈ этом Π² Ρ€Π°ΠΌΠΊΠ°Ρ… вашСго прилоТСния этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ даСтся имя SayHello. Если Π²Ρ‹ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚Π΅ описанный Π²Ρ‹ΡˆΠ΅ способ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ:

procedure CoolProcedure;

external myfirstdll. dll' name DoSomethingReallyCool';

Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° функция ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π—Π΄Π΅ΡΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ CoolProcedure даСтся имя DoSomethingReallyCool. Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ нСсколько Π±ΠΎΠ»Π΅Π΅ слоТСн, Ρ‡Π΅ΠΌ рассмотрСнный Π½Π°ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ способ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС трСбуСтся ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ HelloWorld? Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ»ΡƒΡ‡Π°Π΅ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ DLL. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описывал Π±Ρ‹ эту ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ:

type

THelloWorld = procedure (AForm: TForm);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GetProcAddress ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ DLL ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

var

DLLInstance: THandle;

HelloWorld: THelloWorld;

begin

{ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ DLL }

DLLInstance := LoadLibrary (myfirstdll.dll');

{ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ }

@HelloWorld := GetProcAddress (DLLInstance, HelloWorld');

{ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ }

HelloWorld (Self);

{ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ DLL ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти }

FreeLibrary (DLLInstance);

end;

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

procedure TForm1. DynamicLoadBtnClick (Sender: TObject);

type

THelloWorld = procedure (AForm: TForm);

var

DLLInstance: THandle;

HelloWorld: THelloWorld;

begin

DLLInstance := LoadLibrary (myfirstdll.dll');

if DLLInstance = 0 then begin

MessageDlg (НСвозмоТно Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ DLL', mtError, [mbOK], 0);

Exit;

end;

@HelloWorld := GetProcAddress (DLLInstance, HelloWorld');

if @HelloWorld <> nil then

HelloWorld (Self)

else

MessageDlg (НС Π½Π°ΠΉΠ΄Π΅Π½Π° искомая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°!.', mtError, [mbOK], 0);

FreeLibrary (DLLInstance);

end;

Π’ DLL ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ созданиС ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π½Π΅ ΡΠ»ΠΈΡˆΠΊΠΎΠΌ сильно отличаСтся ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ MDI Π² DLL.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ DLL, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, я ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π˜Ρ‚Π°ΠΊ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, создадим Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Для этого Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ мСню File|New, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½Π΅ΠΌ Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ DLL. ПослС этого Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

library Project2;

{здСсь Π±Ρ‹Π»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ}

uses

SysUtils,

Classes;

{$R *.RES}

begin

end.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. НазовСм Π΅Π³ΠΎ DllForms.dpr.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. НапримСр, Π²Ρ‹Π±Ρ€Π°Π² ΠΏΡƒΠ½ΠΊΡ‚ мСню File|New Form. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. НазовСм Ρ„ΠΎΡ€ΠΌΡƒ DllForm ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ DllFormUnit.pas.

ВСрнСмся ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ Π² Π½Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ShowForm, Π² Π·Π°Π΄Π°Ρ‡Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ созданиС Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π΅Π΅ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для этого ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄.

function ShowForm: Integer; stdcall;

var

Form: TDLLForm;

begin

Form := TDLLForm. Create (Application);

Result := Form. ShowModal;

Form.Free;

end;

ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±Ρ‹Π» скомпилирован Π±Π΅Π· ошибок, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ uses ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Forms.

ЭкспортируСм Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова exports

exports

ShowForm;

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» dllforms.dll. Π­Ρ‚ΠΈ простыС шаги — всС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для создания динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, содСрТащСй Ρ„ΠΎΡ€ΠΌΡƒ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ функция ShowForm объявлСна с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова stdcall. Оно сигнализируСт компилятору ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ экспортС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ соглашСниС ΠΏΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ (standard call calling convention). Экспорт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ создаСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ DLL Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ…, созданных Π² Delphi.

БоглашСниС ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ (Calling conventions) опрСдСляСт, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. БущСствуСт ΠΏΡΡ‚ΡŒ основных соглашСний: stdcall, cdecl, pascal, register ΠΈ safecall. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, посмотрСв Ρ€Π°Π·Π΄Π΅Π» «Calling Conventions» Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Delphi.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ShowForm, соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ShowModal. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΡΡ‚оянии Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ.

НиТС прСдставлСно Π΄Π²Π° листинга, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° DLL (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с Ρ„ΠΎΡ€ΠΌΠΎΠΉ здСсь Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ся), Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ разработанная Π½Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

library DllForms;

uses

SysUtils,

Classes,

Forms,

DllFormUnit in 'DllFormUnit.pas' {DllForm};

{$R *.RES}

function ShowForm: Integer; stdcall;

var

Form: TDLLForm;

begin

Form := TDLLForm. Create (Application);

Result := Form. ShowModal;

Form.Free;

end;

begin

end.

unit TestAppUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class (TForm)

Button1: TButton;

procedure Button1Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

function ShowForm: Integer; stdcall;

external dllforms. dll';

implementation

{$R *.DFM}

procedure TForm1. Button1Click (Sender: TObject);

begin

ShowForm;

end;

end.

ΠŸΡ€ΠΎΡˆΡƒ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ экспортС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ использовано ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово stdcall.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ Π² DLL. Если, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ главная Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства FormStyle, Ρ€Π°Π²Π½Ρ‹ΠΌ MDIForm, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· DLL MDIChild-Ρ„ΠΎΡ€ΠΌΡ‹, Π½Π° ΡΠΊΡ€Π°Π½Π΅ появится сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ MDI-Ρ„ΠΎΡ€ΠΌΡ‹.

Π’ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вашС Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ, VCL провСряСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ свойства FormStyle Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ прилоТСния. Однако Π² Π½Π°ΡˆΠ΅ΠΌ случаС всС Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π²Π΅Ρ€Π½ΠΎ. Π’Π°ΠΊ Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ Π΄Π΅Π»ΠΎ? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, рассматриваСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Application, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π° ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Ну, ΠΈ Π΅ΡΡ‚СствСнно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² DLL Π½Π΅Ρ‚ Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ситуации, Π½Π°Π΄ΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Application динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Application Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния. ЕстСствСнно, это Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° — VCL-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Application Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ памяти ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° «Ρ€ΠΎΠ΄Π½ΠΎΠΉ» для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Application Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована ΠΏΡ€ΠΈ восстановлСнии Π΅Π³ΠΎ значСния.

Π˜Ρ‚Π°ΠΊ, вСрнСмся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π·Π°Π΄ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ шаги, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°ΠΌ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π² DLL MDIChild-Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ.

Π’ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ создаСм Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° TApplication.

БохраняСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Application DLL Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Application динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ставим Π² ΡΠΎΠΎΡ‚вСтствиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Application Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ MDIChild-Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Π½Π΅ΠΉ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Application динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ DLL ΠΈΠ· ΠΏΠ°ΠΌΡΡ‚ΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг прост. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части модуля DLL:

var

DllApp: TApplication;

Π—Π°Ρ‚Π΅ΠΌ создаСм ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Application ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΡŽΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

procedure ShowMDIChild (MainApp: TApplication);

var

Child: TMDIChild;

begin

if not Assigned (DllApp) then begin

DllApp := Application;

Application := MainApp;

end;

Child := TMDIChild. Create (Application.MainForm);

Child.Show;

end;

ВсС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, — это ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Application Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ состояниС. Π”Π΅Π»Π°Π΅ΠΌ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ MyDllProc:

procedure MyDLLProc (Reason: Integer);

begin

if Reason = DLL_PROCESS_DETACH then

{ DLL is Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ся. ВосстанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля Application}

if Assigned (DllApp) then

Application := DllApp;

end;

Π“Π»Π°Π²Π° 2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

2.1 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ тСстов (опросов). Одна ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для формирования ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ирования Ρ„Π°ΠΉΠ»Π° с Ρ‚Скстами вопросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΈ Ρ€ΠΈΡΡƒΠ½ΠΊΠΈ, другая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° — для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ опроса.

2.2 ОписаниС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ основан Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌ созданиСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Массив, Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, состоит ΠΈΠ· Π·Π°ΠΏΠΈΡΠ΅ΠΉ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ полями. Для Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ удалСния вопроса, рСдактирования ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ вопроса, Π° Ρ‚Π°ΠΊΠΆΠ΅ «ΠΏΡ€ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚» — ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ динамичСски созданных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ссылки Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² Π·Π°ΠΏΠΈΡΠΈ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ Ρ€Π°ΡΡΡ‚ояния ΠΎΡ‚ Π»Π΅Π²ΠΎΠ³ΠΎ края ΠΈ Π²Π΅Ρ€Ρ…Π° Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈ Ρ€Π°Π΄ΠΈΠΎΠ³Ρ€ΡƒΠΏΠΏΠ° Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π»ΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π’ Ρ€Π°Π΄ΠΈΠΎΠ³Ρ€ΡƒΠΏΠΏΠ΅ записываСтся 4 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΎΡ‚Π²Π΅Ρ‚Π°, Π² ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ Caption — вопрос. ΠŸΡ€ΠΈ измСнСниях Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ вызываСтся «ΠΏΡ€ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ нововвСдСния.

procedure TForm1. addcomponents;

var i: integer;

Heightt, Widthh: integer;

HH, WW: real;

begin

Form1.Refresh;

if n>0 then

for i:=0 to n-1 do

begin

if (arr[i]. im<>nil) then arr[i]. im:=nil;

arr[i].im:=TImage.Create (Form1);

arr[i].im.Name:='im'+inttostr (i);

arr[i].im.Parent:=Form1;

arr[i].im.Height:=137;

arr[i].im.Width:=161;

arr[i].im.Left:=24;

if arr[i]. fpic<>'' then

arr[i]. im.Picture.LoadFromFile (arr[i].fpic)

else

arr[i].im.Picture.LoadFromFile (ref+'Nopic.jpg');

arr[i].im.Top:=8+i*(137+120);

Heightt:=137;

Widthh:=209;

arr[i].im.AutoSize := true;

arr[i]. im. AutoSize := false;

HH := arr[i]. im. Height / Heightt;

WW := arr[i]. im. Width / Widthh;

if (HH > WW) then

begin

arr[i]. im. Height := trunc (arr[i]. im. Height / HH);

arr[i]. im. Width := trunc (arr[i]. im. Width / HH);

arr[i]. im. Stretch := True;

end

else

begin

arr[i]. im. Height := trunc (arr[i]. im. Height / WW);

arr[i]. im. Width := trunc (arr[i]. im. Width / WW);

arr[i]. im. Stretch := True;

end;

if (arr[i]. r<>nil) then arr[i]. r:=nil;

arr[i].r:=TRadioGroup.Create (Form1);

arr[i].r.Name:='r'+inttostr (i);

arr[i].r.Parent:=Form1;

arr[i].r.Width:=209;

arr[i].r.Height:=105;

arr[i].r.Left:=24;

arr[i].r.Top:=152+i*(137+105+7);

arr[i].r.Items.Add ('1)'+arr[i].fans1);

arr[i].r.Items.Add ('2)'+arr[i].fans2);

arr[i].r.Items.Add ('3)'+arr[i].fans3);

arr[i].r.Items.Add ('4)'+arr[i].fans4);

arr[i].r.Caption:=inttostr (i+1)+'.'+arr[i].fquestion;

arr[i].r.ItemIndex:=0;

arr[i].r.Tag:=arr[i].frightanswer;

end;

end;

procedure TForm1. clearcomponents;

var i: integer;y:boolean;

begin

if n>0 then

for i:=0 to n-1 do

begin

arr[i]. r:=TRadioGroup.Create (nil);

arr[i].r.Free;

arr[i].im:=TImage.Create (nil);

arr[i].im.Free;

end;

y:=true;

while (y) do

begin

y:=false;

for i:=0 to Form1. ComponentCount-1 do

if Form1. Components[i]. GetParentComponent=Form1 then

begin

begin

if (Form1.Components[i] is TRadioGroup) then

begin

Form1.Components[i]. Free;

y:=true;

break;

end;

if (Form1.Components[i] is TImage) then

begin

if Form1. Components[i]<>nil then

(Form1.Components[i] as TImage).Picture.Bitmap.FreeImage;

Form1.Components[i]. Free;

y:=true;

break;

end;

end;

end;

end;

end;

procedure TForm1. visualcomp;

begin

clearcomponents;

addcomponents;

end;

2.3 Π‘Π»ΠΎΠΊ схСмы

2.4 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

1. question=record

fquestion, fans1, fans2,fans3,fans4:string[254]; - слуТат для записи Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ вопроса ΠΈ 4 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‚Π° соотвСтствСнно.

frightanswer:byte; - Π½ΠΎΠΌΠ΅Ρ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° (ΠΎΡ‚ 1 Π΄ΠΎ 4).

fpic:string[255]; - ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅, которая Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

r:TRadioGroup; - Ρ€Π°Π΄ΠΈΠΎΠ³Ρ€ΡƒΠΏΠΏΠ° для отобраТСния вопросов.

im:TImage; - ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊ Π²ΠΎΠΏΡ€ΠΎΡΡƒ. Если ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π΅Ρ‚ (fpic='') Ρ‚ΠΎΠ³Π΄Π° загруТаСтся стандартная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° «Nopic.jpg» .

end;

2. mas=array of question; массив ΠΈΠ· Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π²Ρ‹ΡˆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ структуру вопросов.

2.5 БистСмныС трСбования

Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° опСрационная систСма сСмСйства Windows. ВрСбуСтся Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 4 Мб Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ пространства ΠΈ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 4 Мб ΠžΠ—Π£ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

2.6 Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ «Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρƒ вопросов»

1. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, запуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

2. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ Π±Π°Π·Ρƒ слов, Ρ‚ΠΎ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ «ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ тСст», послС Ρ‡Π΅Π³ΠΎ Π½Π° ΡΠΊΡ€Π°Π½Π΅ появится информация ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ вопросах. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ «Ρ Π½ΡƒΠ»Ρ», Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вопрос.

3. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ вопрос, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ вопроса Π½Π° ΡΡ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊΠ΅ справа, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ соотвСтствСнно.

2.7 Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ «Π’СстСру»

1. ЗапуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

2. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» с Ρ‚Сстом

3. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ врСмя тСстирования

4. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½Π°Ρ‡Π°Ρ‚ΡŒ тСстированиС

5. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ досрочно ΡΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, Ρ‚ΠΎ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ», Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сама это сдСлаСт Π·Π° Π²Π°Ρ

6. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° посчитаСт количСство ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², сколько ΠΈΠ· Π½ΠΈΡ… Π²Π΅Ρ€Π½ΠΎ, ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ выполнСния

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

ИспользованиС динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π΅ Ρ‚Π°ΠΊ слоТно, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. DLL ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡˆΠΈΡ€ΠΎΡ‡Π°ΠΉΡˆΠΈΠ΅ возмоТности для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ самих программистов. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ DLL ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ваша Тизнь станСт Π»Π΅Π³Ρ‡Π΅!

1. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Delphi. Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΌ вСрсиям Delphi Для программистов ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ А. Π―. Π‘ΠΈΠ½ΠΎΠΌ 2006

2. Delphi xx. Руководство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… П. Π’. Π¨ΡƒΠΌΠ°ΠΊΠΎΠ², Π’. Π’. Π€Π°Ρ€ΠΎΠ½ΠΎΠ² 2007

3. Библия для программиста Π² ΡΡ€Π΅Π΄Π΅ Delphi. Π€Π»Π΅Π½ΠΎΠ² М. Π•. 2005

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