Π Π°Π±ΠΎΡΠ° Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ Π² 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π² ΡΡΠ°ΡΠ½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ 1Π‘. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΡΡΡΠ΄Π½ΠΎΡΡΡΠΌΠΈ: ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ DLL Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Π²Π΅ΡΡΠΈΡΡ
ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΈΠ·Π±Π΅Π³Π°Ρ ΡΠΈΠΏΠΈΡΠ½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ Π²ΡΠ·ΠΎΠ²Π° Π²Π½Π΅ΡΠ½ΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· ExternalConnection ΠΈΠ»ΠΈ WinApi, Π½ΠΎ ΠΈ Π½ΡΠ°Π½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π΅Π½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ "ΡΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ" ΠΏΡΠΈ ΡΠ°ΡΡΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ DLL-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ. Π‘ΡΠ°ΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Π° Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ 8.3 (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠ΅Π»ΠΈΠ·Ρ) ΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊ 1Π‘ 7.7 (Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°ΠΌΠΈ).
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ DLL ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ Π² 1Π‘
DLL (Dynamic Link Library) β ΡΡΠΎ Π²Π½Π΅ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ 1Π‘ ΡΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ:
- π ΠΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (ΡΠΊΠ°Π½Π΅ΡΡ ΡΡΡΠΈΡ ΠΊΠΎΠ΄ΠΎΠ², ΡΠΈΡΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡΡ, Π²Π΅ΡΡ)
- β‘ Π£ΡΠΊΠΎΡΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· Math.NET)
- π Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡ)
- π Π Π°Π±ΠΎΡΠ°ΡΡ Ρ API Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² (Π±Π°Π½ΠΊΠΈ, Π³ΠΎΡΡΡΠ»ΡΠ³ΠΈ, ΠΎΠ±Π»Π°ΡΠ½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°)
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² 1Π‘ Π½Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ PDF, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ DLL (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, iTextSharp) ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π½Π°ΠΏΡΡΠΌΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: DLL Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘ (32-bit ΠΈΠ»ΠΈ 64-bit).
ΠΠ΅ΡΡΠΈΠΈ 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ 8.3.20+ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π±ΠΎΡΡ.
Π’Π°ΠΊΠΆΠ΅
Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ DLL Π² 1Π‘
Π 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ 8.3 ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ°Π±ΠΎΡΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ:
- Π§Π΅ΡΠ΅Π· ΠΎΠ±ΡΠ΅ΠΊΡ
ExternalConnectionβ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· COM-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ DLL, Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. - Π§Π΅ΡΠ΅Π·
WinApiβ ΠΏΡΡΠΌΠΎΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, user32.dll, kernel32.dll).
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ .
1. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ExternalConnection
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ COM-ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ DLL, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° C++ ΠΈΠ»ΠΈ C#, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ΅ΡΠ΅Π· regsvr32.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Sum ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ MyMath.dll:
ΠΠ΅ΡΠ΅ΠΌ ΠΠ±ΡΠ΅ΠΊΡDLL;
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡDLL()
ΠΠΎΠΏΡΡΠΊΠ°
ΠΠ±ΡΠ΅ΠΊΡDLL = ΠΠΎΠ²ΡΠΉ COMΠΠ±ΡΠ΅ΠΊΡ("MyMathLibrary.MathOperations");
Π‘ΠΎΠΎΠ±ΡΠΈΡΡ("ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ!");
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠΎΠ±ΡΠΈΡΡ("ΠΡΠΈΠ±ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ: " + ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΡΠΈΠ±ΠΊΠΈ());
ΠΠΎΠ½Π΅ΡΠΠΎΠΏΡΡΠΊΠΈ;
ΠΠΎΠ½Π΅ΡΠΡΠΎΡΠ΅Π΄ΡΡΡ
Π€ΡΠ½ΠΊΡΠΈΡ Π‘Π»ΠΎΠΆΠΈΡΡΠ§ΠΈΡΠ»Π°(Π§ΠΈΡΠ»ΠΎ1, Π§ΠΈΡΠ»ΠΎ2)
ΠΠΎΠ·Π²ΡΠ°Ρ ΠΠ±ΡΠ΅ΠΊΡDLL.Sum(Π§ΠΈΡΠ»ΠΎ1, Π§ΠΈΡΠ»ΠΎ2);
ΠΠΎΠ½Π΅ΡΠ€ΡΠ½ΠΊΡΠΈΠΈ
ΠΠ°ΠΆΠ½ΡΠ΅ Π½ΡΠ°Π½ΡΡ:
- πΉ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
regsvr32 MyMath.dll). - πΉ ΠΠΌΡ COM-ΠΎΠ±ΡΠ΅ΠΊΡΠ° (
"MyMathLibrary.MathOperations") Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅ DLL. - πΉ ΠΠ»Ρ 64-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ 1Π‘ Π½ΡΠΆΠ½Π° 64-ΡΠ°Π·ΡΡΠ΄Π½Π°Ρ Π²Π΅ΡΡΠΈΡ DLL (ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ).
DLL Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ (regsvr32)
Π Π°Π·ΡΡΠ΄Π½ΠΎΡΡΡ DLL ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡΡ 1Π‘
ΠΡΠ°Π²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΠ½ΡΠΈΠ²ΠΈΡΡΡ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ» DLL-->
2. ΠΡΡΠΌΠΎΠΉ Π²ΡΠ·ΠΎΠ² ΡΠ΅ΡΠ΅Π· WinApi
ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ DLL, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ COM-ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ MessageBox ΠΈΠ· user32.dll:
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΠΎΠΊΠ°Π·Π°ΡΡΠ‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅()
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi = ΠΠΎΠ²ΡΠΉ WinApiΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ("user32.dll", "MessageBoxA");
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi.ΠΠΎΠ·Π²ΡΠ°ΡΠ’ΠΈΠΏΠ°ΠΠ°Π½Π½ΡΡ
= ΠΠΎΠ²ΡΠΉ Π’ΠΈΠΏ("Π§ΠΈΡΠ»ΠΎ");
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi.ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅(ΠΠΎΠ²ΡΠΉ ΠΠ°ΡΠ°ΠΌΠ΅ΡΡWinApi("hWnd", ΠΠΎΠ²ΡΠΉ Π’ΠΈΠΏ("Π§ΠΈΡΠ»ΠΎ")));
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi.ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅(ΠΠΎΠ²ΡΠΉ ΠΠ°ΡΠ°ΠΌΠ΅ΡΡWinApi("lpText", ΠΠΎΠ²ΡΠΉ Π’ΠΈΠΏ("Π‘ΡΡΠΎΠΊΠ°")));
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi.ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅(ΠΠΎΠ²ΡΠΉ ΠΠ°ΡΠ°ΠΌΠ΅ΡΡWinApi("lpCaption", ΠΠΎΠ²ΡΠΉ Π’ΠΈΠΏ("Π‘ΡΡΠΎΠΊΠ°")));
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi.ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅(ΠΠΎΠ²ΡΠΉ ΠΠ°ΡΠ°ΠΌΠ΅ΡΡWinApi("uType", ΠΠΎΠ²ΡΠΉ Π’ΠΈΠΏ("Π§ΠΈΡΠ»ΠΎ")));
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ = WinApi.ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ(ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi, 0, "ΠΡΠΈΠ²Π΅Ρ ΠΈΠ· 1Π‘!", "Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅", 0);
ΠΠΎΠ½Π΅ΡΠΡΠΎΡΠ΅Π΄ΡΡΡ
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΈΠ±ΠΊΠ° Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΏΠ°Π΄Π΅Π½ΠΈΡ 1Π‘ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π§Π°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ WinApi
πΈ ΠΠ΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΠΈ: 32-Π±ΠΈΡΠ½Π°Ρ 1Π‘ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ 64-Π±ΠΈΡΠ½ΡΡ DLL, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
πΈ ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ : ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΡΡΠΎΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΡΠ»Π° Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
πΈ ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠ°Π²: Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
πΈ ΠΡΡΠΈ ΠΊ DLL: ΠΡΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΠΏΠ°ΠΏΠΊΠ°Ρ
(System32, SysWOW64), Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ.
Π’ΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ : ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
ΠΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ DLL Π² 1Π‘ β ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². Π’ΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π² 1Π‘ ΠΈ Π²ΠΎ Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ°ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ ΠΈΠ»ΠΈ Π½Π΅Π²Π΅ΡΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ²:
| Π’ΠΈΠΏ Π² 1Π‘ | Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΏ Π² DLL (C/C++) | ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ |
|---|---|---|
Π§ΠΈΡΠ»ΠΎ |
int, long, double |
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» ΠΈΠ»ΠΈ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ |
Π‘ΡΡΠΎΠΊΠ° |
char*, BSTR (Π΄Π»Ρ COM) |
Π’Π΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ DLL) |
ΠΡΠ»Π΅Π²ΠΎ |
BOOL, bool |
ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (ΠΡΡΠΈΠ½Π°/ΠΠΎΠΆΡ) |
ΠΠ²ΠΎΠΈΡΠ½ΡΠ΅ΠΠ°Π½Π½ΡΠ΅ |
byte[], void* |
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π±Π°ΠΉΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ) |
ΠΠ°ΡΠ° |
SYSTEMTIME, time_t |
Π’ΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² timestamp ΠΈΠ»ΠΈ ΡΡΡΡΠΊΡΡΡΡ |
ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΠΎΠΈΡ ΡΠ΄Π΅Π»ΠΈΡΡ ΡΡΡΠΎΠΊΠ°ΠΌ. Π 1Π‘ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ BSTR (Π΄Π»Ρ COM) ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Ρ (char*) Π΄Π»Ρ WinApi. ΠΡΠΈ ΡΡΠΎΠΌ:
- π ΠΠ»Ρ ANSI-ΡΡΡΠΎΠΊ (ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡΠΎΠ²Π°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΡΡΠΈΠΊΡ
AΠ² ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,MessageBoxA). - π ΠΠ»Ρ Unicode-ΡΡΡΠΎΠΊ (Π΄Π²ΡΡ
Π±Π°ΠΉΡΠΎΠ²Π°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°) β ΡΡΡΡΠΈΠΊΡ
W(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,MessageBoxW).
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΡΠΎΠΊΠΈ Π² Unicode:
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi = ΠΠΎΠ²ΡΠΉ WinApiΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ("user32.dll", "MessageBoxW");
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡWinApi.ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅(ΠΠΎΠ²ΡΠΉ ΠΠ°ΡΠ°ΠΌΠ΅ΡΡWinApi("lpText", ΠΠΎΠ²ΡΠΉ Π’ΠΈΠΏ("Π‘ΡΡΠΎΠΊΠ°")));
ΠΡΠ»ΠΈ DLL ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π΄Π°Π½Π½ΡΡ
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΡΠ΅Π»), Π² 1Π‘ Π΅Π³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΊ ΠΠ²ΠΎΠΈΡΠ½ΡΠ΅ΠΠ°Π½Π½ΡΠ΅ Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΠΠΎΠΌΠ΅ΡΡΠΈΡΡΠΠΎΠΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅() ΠΈ ΠΠΎΠ»ΡΡΠΈΡΡΠΠ·ΠΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎΠ₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°().
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ°
ΠΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ DLL Π² 1Π‘ ΡΠ°ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ΄Π°ΡΡ ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
1. Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΈΡ ΠΏΡΠΈΡΠΈΠ½Ρ
- π¨
ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° (COMΠΠ±ΡΠ΅ΠΊΡ)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π° ΠΈΠ»ΠΈ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° ΠΏΠΎ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΠΈ. - π¨
ΠΠ΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°β Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². - π¨
ΠΠ°ΡΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈβ ΠΎΡΠΈΠ±ΠΊΠ° Π² ΡΠ°ΠΌΠΎΠΉ DLL (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ Π°Π΄ΡΠ΅ΡΡ). - π¨
Π€ΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅β ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠ° Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Π²Π΅ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ DLL.
ΠΠ»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
- π ΠΡΡΠ½Π°Π» ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ 1Π‘ (
1CV8LogΠ² ΠΏΠ°ΠΏΠΊΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²). - π ΠΡΠ»Π°Π΄ΡΠΈΠΊ DLL (Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ).
- π Π£ΡΠΈΠ»ΠΈΡΡ Π²ΡΠΎΠ΄Π΅ Dependency Walker Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ DLL.
2. ΠΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΡΠ΅Π³Π΄Π° ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΠΉΡΠ΅ Π²ΡΠ·ΠΎΠ² Π²Π½Π΅ΡΠ½ΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ Π² Π±Π»ΠΎΠΊ ΠΠΎΠΏΡΡΠΊΠ°..ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ:
Π€ΡΠ½ΠΊΡΠΈΡ ΠΡΠ·Π²Π°ΡΡΠΠ½Π΅ΡΠ½ΡΡΠ€ΡΠ½ΠΊΡΠΈΡ(ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ1, ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ2)
ΠΠΎΠΏΡΡΠΊΠ°
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ = ΠΠ±ΡΠ΅ΠΊΡDLL.MyFunction(ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ1, ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ2);
ΠΠΎΠ·Π²ΡΠ°Ρ Π Π΅Π·ΡΠ»ΡΡΠ°Ρ;
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ°ΠΏΠΈΡΠ°ΡΡΠΡΡΠ½Π°Π»Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ(ΠΠ‘ΡΡ("ru = 'ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° MyFunction: '") + ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΡΠΈΠ±ΠΊΠΈ(), Π£ΡΠΎΠ²Π΅Π½ΡΠΡΡΠ½Π°Π»Π°ΠΡΠΈΠ±ΠΊΠ°);
ΠΠΎΠ·Π²ΡΠ°Ρ ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ;
ΠΠΎΠ½Π΅ΡΠΠΎΠΏΡΡΠΊΠΈ;
ΠΠΎΠ½Π΅ΡΠ€ΡΠ½ΠΊΡΠΈΠΈ
ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· DLL. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΎΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 0 ΠΈΠ»ΠΈ -1), ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
Π§Π°ΡΡΡΠΉ Π²ΡΠ·ΠΎΠ² Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ 1Π‘, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ:
- π’ DLL Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ (Π° Π½Π΅ ΠΊΡΡΠΈΡΡΠ΅ΡΡΡ).
- π’ ΠΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΠ±ΡΡΠΌΡ Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ°ΡΡΠΈΠ²Ρ).
- π’ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ).
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ:
- ΠΡΡΠΈΡΡΠΉΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ DLL:
Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
COMΠΠ±ΡΠ΅ΠΊΡΠΎΠ΄ΠΈΠ½ ΡΠ°Π· (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ. - ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ
:
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ², Π»ΡΡΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ, Π° Π½Π΅ ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ:
ΠΠ»Ρ Π΄ΠΎΠ»Π³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ) Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ DLL Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΡΠ΅ΡΠ΅Π·
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°ΡΠΡΠΎΡΠ΅Π΄ΡΡΠ°. - ΠΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ "ΡΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ":
ΠΠΎΡΠ»Π΅ ΡΠ°Π±ΠΎΡΡ Ρ DLL ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΠΉΡΠ΅ ΡΠ΅ΡΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅
ΠΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ()Π΄Π»Ρ COM-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²).
ΠΡΠΈΠΌΠ΅Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° DLL:
ΠΠ΅ΡΠ΅ΠΌ Π³ΠΠ±ΡΠ΅ΠΊΡDLL;
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡDLL()
ΠΡΠ»ΠΈ Π³ΠΠ±ΡΠ΅ΠΊΡDLL = ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π’ΠΎΠ³Π΄Π°
Π³ΠΠ±ΡΠ΅ΠΊΡDLL = ΠΠΎΠ²ΡΠΉ COMΠΠ±ΡΠ΅ΠΊΡ("MyLibrary.MyClass");
ΠΠΎΠ½Π΅ΡΠΡΠ»ΠΈ;
ΠΠΎΠ½Π΅ΡΠΡΠΎΡΠ΅Π΄ΡΡΡ
ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ?
π ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ 1Π‘ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΠΉΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ΅ Π·Π°Π΄Π°Ρ.
π ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ Π²ΡΠΎΠ΄Π΅ Process Explorer Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ DLL.
π ΠΡΠ»ΠΈ ΠΏΠ°ΠΌΡΡΡ ΡΠ°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° β Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ΅ΡΡΡΡΡ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², Π³Π΄Π΅ DLL ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π² 1Π‘.
1. Π Π°Π±ΠΎΡΠ° Ρ ΡΠΈΡΠΊΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠΌ
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΈΡΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΡΠΎΠ» ΠΈΠ»ΠΈ Π¨ΡΡΠΈΡ -Π) ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ DLL Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ ΡΠ΅ΠΊΠ°:
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΠ§Π΅ΠΊ()
ΠΠΎΠΏΡΡΠΊΠ°
Π€Π = ΠΠΎΠ²ΡΠΉ COMΠΠ±ΡΠ΅ΠΊΡ("AddIn.Fptr10");
Π€Π .ΠΡΠΊΡΡΡΡΠΠΎΡΡ("COM1");
Π€Π .ΠΠ°ΡΠ°ΡΡΠ§Π΅ΠΊ();
Π€Π .ΠΡΠΎΠ±ΠΈΡΡΠ‘ΡΠΌΠΌΡ(100, 1, "Π’ΠΎΠ²Π°Ρ 1", 18, 0);
Π€Π .ΠΠ°ΠΊΡΡΡΡΠ§Π΅ΠΊ();
Π€Π .ΠΠ°ΠΊΡΡΡΡΠΠΎΡΡ();
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠΎΠ±ΡΠΈΡΡ("ΠΡΠΈΠ±ΠΊΠ° ΠΏΠ΅ΡΠ°ΡΠΈ: " + ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΡΠΈΠ±ΠΊΠΈ());
ΠΠΎΠ½Π΅ΡΠΠΎΠΏΡΡΠΊΠΈ;
ΠΠΎΠ½Π΅ΡΠΡΠΎΡΠ΅Π΄ΡΡΡ
2. Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ Π·Π°ΡΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠΎΠ΄Π΅ CryptoAPI ΠΈΠ»ΠΈ BouncyCastle. ΠΡΠΈΠΌΠ΅Ρ Ρ ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ:
Π€ΡΠ½ΠΊΡΠΈΡ ΠΠΎΠ»ΡΡΠΈΡΡΠ₯ΡΡ(Π‘ΡΡΠΎΠΊΠ°)
Π₯ΡΡΠ΅Ρ = ΠΠΎΠ²ΡΠΉ COMΠΠ±ΡΠ΅ΠΊΡ("System.Security.Cryptography.SHA256Managed");
ΠΠ°ΠΉΡΡ = Π₯ΡΡΠ΅Ρ.ComputeHash(Π’Π΅ΠΊΡΡΠΠΠ²ΠΎΠΈΡΠ½ΡΠ΅ΠΠ°Π½Π½ΡΠ΅(Π‘ΡΡΠΎΠΊΠ°, ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡΠ°.UTF8));
ΠΠΎΠ·Π²ΡΠ°Ρ Base64Π‘ΡΡΠΎΠΊΠ°(ΠΠ°ΠΉΡΡ);
ΠΠΎΠ½Π΅ΡΠ€ΡΠ½ΠΊΡΠΈΠΈ
3. Π Π°Π±ΠΎΡΠ° Ρ API Π±Π°Π½ΠΊΠΎΠ²
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π±Π°Π½ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π‘Π±Π΅ΡΠ±Π°Π½ΠΊ ΠΈΠ»ΠΈ Π’ΠΈΠ½ΡΠΊΠΎΡΡ) ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ DLL Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ 1Π‘. ΠΡΠΈΠΌΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΡΠ΅Π½ΠΈΡ:
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΡΠΏΡΠ°Π²ΠΈΡΡΠΠ»Π°ΡΠ΅ΠΆ(Π‘ΡΠΌΠΌΠ°, Π‘ΡΠ΅Ρ, ΠΠ½Π½)
ΠΠ°Π½ΠΊAPI = ΠΠΎΠ²ΡΠΉ COMΠΠ±ΡΠ΅ΠΊΡ("Tinkoff.BusinessAPI");
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ = ΠΠ°Π½ΠΊAPI.SendPayment(Π‘ΡΠΌΠΌΠ°, Π‘ΡΠ΅Ρ, ΠΠ½Π½);
ΠΡΠ»ΠΈ Π Π΅Π·ΡΠ»ΡΡΠ°Ρ.Π£ΡΠΏΠ΅Ρ
Π’ΠΎΠ³Π΄Π°
Π‘ΠΎΠΎΠ±ΡΠΈΡΡ("ΠΠ»Π°ΡΡΠΆ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½, ID: " + Π Π΅Π·ΡΠ»ΡΡΠ°Ρ.ID);
ΠΠ½Π°ΡΠ΅
Π‘ΠΎΠΎΠ±ΡΠΈΡΡ("ΠΡΠΈΠ±ΠΊΠ°: " + Π Π΅Π·ΡΠ»ΡΡΠ°Ρ.Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅);
ΠΠΎΠ½Π΅ΡΠΡΠ»ΠΈ;
ΠΠΎΠ½Π΅ΡΠΡΠΎΡΠ΅Π΄ΡΡΡ
ΠΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΡ DLL ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΈΡ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΡΡΠ΅Π½Π΄Π΅. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π±Π°Π½ΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΡ (sandbox) Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π±Π΅Π· ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΠΉ.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π² 1Π‘ ΡΠΎΠΏΡΡΠΆΠ΅Π½ΠΎ Ρ ΡΠΈΡΠΊΠ°ΠΌΠΈ:
- π‘οΈ Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π² DLL:
ΠΡΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΠ΅ΡΠ΅Π· 1Π‘.
- π‘οΈ ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ Π²Π΅ΡΡΠΈΠΉ:
Π Π°Π·Π½ΡΠ΅ DLL ΠΌΠΎΠ³ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Microsoft Visual C++ Redistributable).
- π‘οΈ ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠΎΠΌ:
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Kaspersky ΠΈΠ»ΠΈ ESET) ΠΌΠΎΠ³ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ DLL.
- ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΈΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
- ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΏΡΠ°Π²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
- Π Π΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅ DLL Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΉ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Ρ ΡΠ΅ΡΡΡ).
ΠΡΠ»ΠΈ DLL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ»Π°ΡΠ΅ΠΆΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅Π΄ΠΈΡΠ΅ Π°ΡΠ΄ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠΎΠ΄Π΅ OWASP Dependency-Check).
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅
ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Windows ΠΌΠΎΠ³ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ unsigned-DLL Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΠΠ‘ (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Windows 10 20H2). ΠΡΠ»ΠΈ Π²Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ, Π΅Ρ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠ²Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ (Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠΈΡ ΡΡΠ°Π½ΡΠΈΠΉ).
FAQ: Π§Π°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ DLL Π² 1Π‘
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ 32-Π±ΠΈΡΠ½ΡΡ DLL Π² 64-Π±ΠΈΡΠ½ΠΎΠΉ 1Π‘?
ΠΠ΅Ρ, ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π Π°Π·ΡΡΠ΄Π½ΠΎΡΡΡ DLL Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ 64-Π±ΠΈΡΠ½Π°Ρ 1Π‘, Π²ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ 64-Π±ΠΈΡΠ½ΡΠΌΠΈ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ 32-Π±ΠΈΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ 1Π‘ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌ.
ΠΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² DLL ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΡΡΡΡΠΊΡΡΡΡ?
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΠ²ΠΎΠΈΡΠ½ΡΠ΅ΠΠ°Π½Π½ΡΠ΅ Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² JSON ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ). ΠΠ»Ρ ΡΡΡΡΠΊΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π‘ΡΡΡΠΊΡΡΡΠ°ΠΠ‘ΡΡΠΎΠΊΡ() ΠΈ Π‘ΡΡΠΎΠΊΡΠΠ‘ΡΡΡΠΊΡΡΡΡ().
ΠΡΠΈΠΌΠ΅Ρ:
ΠΠ°Π½Π½ΡΠ΅ = ΠΠΎΠ²ΡΠΉ Π‘ΡΡΡΠΊΡΡΡΠ°("ΠΠΎΠ»Π΅1, ΠΠΎΠ»Π΅2", 100, "Π’Π΅ΠΊΡΡ");
Π‘ΡΡΠΎΠΊΠ°ΠΠ°Π½Π½ΡΡ
= Π‘ΡΡΡΠΊΡΡΡΠ°ΠΠ‘ΡΡΠΎΠΊΡ(ΠΠ°Π½Π½ΡΠ΅);
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ = ΠΠ±ΡΠ΅ΠΊΡDLL.ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡΠΠ°Π½Π½ΡΠ΅(Π‘ΡΡΠΎΠΊΠ°ΠΠ°Π½Π½ΡΡ
);
ΠΠΎΡΠ΅ΠΌΡ 1Π‘ Π²ΡΠ»Π΅ΡΠ°Π΅Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· DLL?
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ:
- ΠΠ΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠ΅ ΡΡΡΠΎΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΡΠ»Π°).
- ΠΡΠΈΠ±ΠΊΠ° Π² ΡΠ°ΠΌΠΎΠΉ DLL (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ).
- ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ Π²Π΅ΡΡΠΈΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π½ΡΠΆΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ Visual C++ Redistributable).
ΠΠ»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΡΡΠ½Π°Π» ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ 1Π‘ ΠΈ Π»ΠΎΠ³ΠΈ Windows (Event Viewer).
ΠΠ°ΠΊ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄ DLL, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C#?
ΠΡΠ»ΠΈ DLL Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° C#, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅:
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ 1Π‘ ΡΠ΅ΡΠ΅Π· Visual Studio Debugger (ΠΌΠ΅Π½Ρ
Debug β Attach to Process). - ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ DLL (Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠ°ΠΉΠ»).
- ΠΠ°ΠΏΡΡΡΠΈΡΡ 1Π‘ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Ρ ΠΊΠ»ΡΡΠΎΠΌ
/Debug.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ C# Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΎΡΠ»Π°Π΄ΠΎΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (Debug ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ).
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ DLL Π² Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1Π‘?
ΠΠ΅Ρ, DLL ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠ»ΡΡΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ ΠΈΠ»ΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ 1Π‘. Π Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ HTTP-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈΠ»ΠΈ REST API, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ DLL Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅.