ΠΡΠΈΠ±ΠΊΠ° Β«Unsatisfied Forward or External DeclarationΒ»** β ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π° Delphi. ΠΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΡΠ°ΡΡΠΎ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ² Π² ΡΠ°ΡΡΠ΅ΡΡΠ½Π½ΠΎΡΡΠΈ: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΡΠ»Π°ΡΡΡ Π½Π° Β«Π½Π΅ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ½Π½ΠΎΠ΅Β» ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ·Π²Π°Π»ΠΎ ΡΠ±ΠΎΠΉ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°, ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΠ΅Π±ΡΠ΅Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΡΡΠΌΡΡ (forward) ΠΈ Π²Π½Π΅ΡΠ½ΠΈΡ (external) ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Π² Object Pascal.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΎΡ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π² Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ external-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΠΌΠΈ, ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΡΠΎΠ΅ΡΡΡ Π½Π΅ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, Π° Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ°ΡΠ΅ΡΠΈΠ°Π» Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΊΠ°ΠΊ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ, ΡΠ°ΠΊ ΠΈ ΠΎΠΏΡΡΠ½ΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΠΌΡΡ Ρ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌΠΈ Π±Π°Π³Π°ΠΌΠΈ Π² ΠΊΡΡΠΏΠ½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
.
Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° Β«Unsatisfied Forward or External DeclarationΒ»?
ΠΠ°ΡΠ½ΡΠΌ Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ². Π Delphi Π΅ΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
- πΉ Forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ β ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡ, ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·ΠΆΠ΅ Π΄Π°ΡΡ Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
typeTMyClass = class; // Forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅
...
TMyClass = class(TObject) // ΠΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
// ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
end;
- πΉ External-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ β ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΈΠ»ΠΈ Π²Π½Π΅ΡΠ½Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
external 'user32.dll').
ΠΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π½Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²ΡΠ·Π°ΡΡ Π΅Π³ΠΎ Ρ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΡΠΈΡΠΈΠ½Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ:
- π ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°/ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠΎΡΠ»Π΅
forward. - π ΠΠΏΠ΅ΡΠ°ΡΠΊΠ° Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ.
- π Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ.
- π ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊΠ° (linker) Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅.
- π ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΡΡΡΠΌΠΈ ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ (
.dll,.obj).
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ forward Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°Π±ΡΠ²Π°Π΅ΡΠ΅ Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΡΠΊΠ°ΠΆΠ΅Ρ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. ΠΠ½ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ΄Π°ΡΡ ΠΎΠ±ΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Β«Π½Π΅ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ½Π½ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈΒ», ΡΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΡ.
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
1. ΠΠ°Π±ΡΡΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ forward
ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Ρ forward, Π½ΠΎ Π±Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
type
TMyForm = class; // Forward
// ... Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄ ...
// Π Π³Π΄Π΅ ΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ TMyForm? ΠΠ³ΠΎ Π½Π΅Ρ!
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅.
2. ΠΠΏΠ΅ΡΠ°ΡΠΊΠΈ Π² ΠΈΠΌΠ΅Π½Π°Ρ
Π§Π΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΊΡΠΎΡ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΎΡΠΌΠ΅Π½ΡΠ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
type
TMyClass = class; // Forward
// ...
TMyKlass = class(TObject) // ΠΠΏΠ΅ΡΠ°ΡΠΊΠ°: MyClass vs MyKlass
// ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
end;
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ TMyClass ΠΈ TMyKlass ΠΊΠ°ΠΊ ΡΠ°Π·Π½ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
3. Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
ΠΡΠ»ΠΈ Unit1 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Unit2, Π° Unit2 β Unit1, ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π΅ΡΡΡ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Β«Π·Π°ΠΏΡΡΠ°ΡΡΡΡΒ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
// Unit1.pas
unit Unit1;
interface
uses Unit2;
type
TClass1 = class; // Forward
// Unit2.pas
unit Unit2;
interface
uses Unit1;
type
TClass2 = class(TClass1) // ΠΡΠΈΠ±ΠΊΠ°: TClass1 Π΅ΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½!
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΡΠ°Π·ΡΡΠ²Π°ΠΉΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ»ΠΈ Π²ΡΠ½ΠΎΡΠΈΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΡΠΈΠΏΡ Π² ΡΡΠ΅ΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
- Π§Π°ΡΡΠΎ (Π΅ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡΠ½ΠΎ)
- ΠΠ½ΠΎΠ³Π΄Π° (Π΅ΠΆΠ΅ΠΌΠ΅ΡΡΡΠ½ΠΎ)
- Π ΡΠ΄ΠΊΠΎ (ΡΠ°Π· Π² ΠΏΠΎΠ»Π³ΠΎΠ΄Π°)
- ΠΠΈΠΊΠΎΠ³Π΄Π°
ΠΠ°ΠΊ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ
ΠΡΠ»ΠΈ Π²Ρ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΡΠ»Π΅Π΄ΡΠΉΡΠ΅ ΡΡΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ:
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΈΠΌΡ ΡΡΡΠ½ΠΎΡΡΠΈ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΈΠΌΡ Π²
forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π² ΡΠΈΠΌΠ²ΠΎΠ» (Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡ!). - ΠΡΠΈΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅, Π΄Π»Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡ/ΡΡΠ½ΠΊΡΠΈΠΉ β Π»ΠΈΠ±ΠΎ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅, Π»ΠΈΠ±ΠΎ (Π΅ΡΠ»ΠΈ
external) Π² ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. - ΠΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅
uses. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ, ΠΈ Π½Π΅Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. - ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ»Ρ
external-ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΡΡΠΈ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ (.dll,.lib) ΡΠΊΠ°Π·Π°Π½Ρ Π²Project β Options β Delphi Compiler β Linking.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΈΠΌΡΠ½ Π² forward ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ|
ΠΠΎΠΈΡΠΊ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅|
ΠΠ½Π°Π»ΠΈΠ· ΡΠ΅ΠΊΡΠΈΠΈ uses Π½Π° ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ|
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΡΠ΅ΠΉ ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°|
ΠΡΠΎΡΠΌΠΎΡΡ Π»ΠΎΠ³Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ-->
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ ΡΠ΅ΡΠ΅Π½Π°, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ°Π·Π΄Π΅Π»Ρ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ
Π Π°Π·Π±Π΅ΡΡΠΌ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΈΠ· ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ 1: Forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π±Π΅Π· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠΈΠ±ΠΊΠ°:
type
TDataProcessor = class; // Forward
procedure ProcessData(Data: TDataProcessor); // ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅
// ... Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄ ...
// ΠΠ°Π±ΡΠ»ΠΈ Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ TDataProcessor!
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°:
type
TDataProcessor = class(TObject)
public
procedure Execute;
end;
ΠΡΠΈΠΌΠ΅Ρ 2: ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ external
ΠΡΠΈΠ±ΠΊΠ°:
procedure ExternalProc; external 'mylib.dll'; // ΠΡΠΈΠ±ΠΊΠ°: Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² DLL
// ΠΈΠ»ΠΈ
procedure ExternalProc; external 'mylib.dll' name 'WrongProcName'; // ΠΠΌΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ:
- πΉ ΠΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²
nameΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² DLL (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ Dependency Walker). - πΉ ΠΡΡΡ ΠΊ DLL ΡΠΊΠ°Π·Π°Π½ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ» Π»Π΅ΠΆΠΈΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, ΡΡΠΎ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ».
ΠΡΠΈΠΌΠ΅Ρ 3: Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Ρ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ
ΠΡΠΈΠ±ΠΊΠ°: ΠΠ²Π° ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π° ΡΠ΅ΡΠ΅Π· forward:
// ModuleA.pas
unit ModuleA;
interface
uses ModuleB;
type
TClassA = class(TClassB); // ΠΡΠΈΠ±ΠΊΠ°: TClassB Π΅ΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½!
// ModuleB.pas
unit ModuleB;
interface
uses ModuleA;
type
TClassB = class; // Forward
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΡΠ½Π΅ΡΠΈΡΠ΅ ΠΎΠ±ΡΠΈΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π² ΡΡΠ΅ΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ.
| Π’ΠΈΠΏ ΠΎΡΠΈΠ±ΠΊΠΈ | ΠΡΠΈΡΠΈΠ½Π° | Π Π΅ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|
| ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ | ΠΠ°Π±ΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ/ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠΎΡΠ»Π΅ forward |
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ |
| ΠΠΏΠ΅ΡΠ°ΡΠΊΠ° Π² ΠΈΠΌΠ΅Π½ΠΈ | Π Π°Π·Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π² forward ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ |
ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π»ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ |
| Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ | ΠΠ²Π° ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π° ΡΠ΅ΡΠ΅Π· forward |
ΠΡΠ½Π΅ΡΡΠΈ ΠΎΠ±ΡΠΈΠ΅ ΡΠΈΠΏΡ Π² ΡΡΠ΅ΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ |
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ external |
ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡΡΡ ΠΊ DLL | ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π² DLL ΠΈ ΠΏΡΡΠΈ |
| ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊΠ° | ΠΡΡΡΡΡΡΠ²ΡΡΡ ΠΏΡΡΠΈ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ Π² ΠΎΠΏΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° | ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΡΠΈ Π² Project Options β Linking |
Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΠΌΠΈΡΡ ΠΈ Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΡ
ΠΠΎΠΊΡΡΠ³ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Ρ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠΎΠ². Π Π°Π·Π±Π΅ΡΡΠΌ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅:
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎforward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡ/ΡΡΠ½ΠΊΡΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:procedure DoSomething; forward; // Forward Π΄Π»Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡprocedure AnotherProc;
begin
DoSomething; // ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ, Ρ ΠΎΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅ΡΡ Π½Π΅Ρ
end;
procedure DoSomething; // Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
begin
// ΠΊΠΎΠ΄
end;
ΠΠΈΡ 1: Β«ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅Π³Π΄Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡΠΎΠΊΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉΒ».
Π Π΅Π°Π»ΡΠ½ΠΎΡΡΡ: ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΡΡΠΎ Π²ΡΠ΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π² ΠΌΠ΅ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, Π° Π½Π΅ Π² ΠΌΠ΅ΡΡΠ΅ Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°Π±ΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ, ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΡΠ°ΠΌ, Π³Π΄Π΅ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ.
ΠΠΈΡ 2: Β«External ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ DLLΒ».
Π Π΅Π°Π»ΡΠ½ΠΎΡΡΡ: ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° external ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ ΠΈ Π½Π° .obj-ΡΠ°ΠΉΠ»Ρ, ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠ»Π°Π²Π½ΠΎΠ΅ β ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΡΡ ΠΈ ΠΈΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°.
ΠΠΈΡ 3: Β«Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅Β».
Π Π΅Π°Π»ΡΠ½ΠΎΡΡΡ: Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠΎΡΠ΅ΡΠ°ΡΡΡΡ Ρ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ. Π§ΠΈΡΡΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Π±Π΅Π· forward) ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅: "Unit X interfaces with unit Y which interfaces with unit X".
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Delphi Parser ΠΈΠ»ΠΈ Castalia Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΡΠΎ Π½Π°ΠΉΡΠΈ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ.
ΠΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ: Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ
Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ ΡΡΠΈΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΠΊ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ Β«Unsatisfied Forward or External DeclarationΒ»**:
- π ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
forwardΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎ. ΠΠ΅ ΠΎΠ±ΡΡΠ²ΠΉΡΠ΅ Π²ΡΡ ΠΏΠΎΠ΄ΡΡΠ΄ ΡΠ΅ΡΠ΅Π·forwardβ ΡΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠΎΠ΄Π°. ΠΡΠΈΠΌΠ΅Π½ΡΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ²). - π Π‘ΡΡΡΠΊΡΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. ΠΡΠ»ΠΈ Π΄Π²Π° ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Ρ, Π²ΡΠ½Π΅ΡΠΈΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΡΠΈΠΏΡ Π² ΡΡΠ΅ΡΠΈΠΉ.
- π ΠΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΡΠΊΡΠΏΠΎΡΡ DLL. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ
externalΠ²ΡΠ΅Π³Π΄Π° ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· DLL (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Dependency Walker ΠΈΠ»ΠΈ dumpbin). - π ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Π²Π°Ρ ΠΊΠΎΠ΄ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΈ ΠΏΡΡΡΠΌΠΈ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ.
- π ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Delphi (Π½Π°ΡΠΈΠ½Π°Ρ Ρ 10.4 Sydney) ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ Π² ΠΈΠΌΠ΅Π½Π°Ρ .
ΠΠ»Ρ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ PascalAnalyzer ΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Delphi). ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ²Π»ΡΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΡΠ°Π½Π½ΠΈΡ ΡΡΠ°ΠΏΠ°Ρ .
ΠΠΎΡΠ΅ΠΌΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π½ΠΎ Π½Π΅ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ?
ΠΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΈΡΠ½Π° Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ Π²ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠΈΠ½Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ:
1. Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π²ΠΈΠ΄Π½Ρ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
2. ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ ΠΏΡΡΡΠΌΠΈ ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ.
3. ΠΡΠΈΠ±ΠΊΠ°ΠΌΠΈ Π² forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»ΡΡ
.
FAQ: Π§Π°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ ΠΎΡΠΈΠ±ΠΊΠ΅
ΠΠΎΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΎ?
ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Π² Delphi. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄ Π² Π΄Π²Π° ΠΏΡΠΎΡ
ΠΎΠ΄Π°: Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ½ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, Π½Π° Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΈΡ
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΡΠ»ΠΈ Π½Π° Π²ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡ
ΠΎΠ΄Π΅ ΡΡΠΎ-ΡΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΎΠ½ Π²ΡΠ΄Π°ΡΡ ΠΎΠ±ΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π§ΡΠΎΠ±Ρ ΡΡΠ·ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ:
- ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ β ΡΠ°ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°.
- ΠΡΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅
forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. - ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΡΠ½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π·
usesβ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΌ.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ forward Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²?
ΠΠ°, Π½ΠΎ Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°ΠΌΠΈ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π² Delphi Π½Π΅ ΡΡΠ΅Π±ΡΡΡ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ Π΄ΠΈΡΠΏΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ (dispinterface) ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠ΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π³Π΄Π΅ forward ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ:
type
IMyInterface = interface; // Forward Π½Π΅ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²
TMyClass = class(TInterfacedObject, IMyInterface)
// ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
end;
IMyInterface = interface // ΠΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
['{GUID}']
procedure DoSomething;
end;
ΠΠΎ Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄ΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ forward.
ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· DLL?
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
- πΉ Dependency Walker (depends.exe) β ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
- πΉ ΠΠΎΠΌΠ°Π½Π΄Π°
dumpbin /exports mylib.dll(Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠ°Π² Visual Studio). - πΉ Heaventools PE Explorer β Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° DLL.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄Π΅ΠΊΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, _FunctionName@12 Π΄Π»Ρ stdcall). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² external Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅ΠΊΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ.
ΠΠΎΡΠ΅ΠΌΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Delphi?
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ:
- πΉ ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅. ΠΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Delphi ΠΌΠΎΠ³ΡΡ ΡΡΡΠΎΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ
forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ. - πΉ ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΈΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
- πΉ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ±ΡΠΎΡΡΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° (
Project β Options β Reset to Defaults) ΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ Π·Π°Π½ΠΎΠ²ΠΎ.
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ (View β Tool Windows β Messages) β ΡΠ°ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΎΡΠ»Π°Π΄ΠΈΡΡ Π²Π½Π΅ΡΠ½ΡΡ DLL, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° Ρ external?
ΠΠ°, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ:
- Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ DLL ΠΈΠ»ΠΈ Π΅Ρ
.pdb-ΡΠ°ΠΉΠ» (Π΄Π»Ρ Windows). - Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° (
Project β Options β Debugger) Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΡΡ ΠΊ.pdb-ΡΠ°ΠΉΠ»Ρ. - ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ Π² Delphi β ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π΅Ρ ΠΊΠΎΠ΄ (Π΅ΡΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Π°).
ΠΡΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² Π½Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, IDA Pro ΠΈΠ»ΠΈ Ghidra), Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π³Π»ΡΠ±ΠΎΠΊΠΈΡ Π·Π½Π°Π½ΠΈΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°.
ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ forward-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π° ΠΏΠ°ΡΠ½ΠΎΡΡΡ: Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ forward, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π°ΠΉΡΠ΅ Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ 90% ΡΠ»ΡΡΠ°Π΅Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.