Π Π°Π±ΠΎΡ‚Π° с внСшними 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Π‘?
Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с API
УскорСниС вычислСний
ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ
Π”Ρ€ΡƒΠ³ΠΎΠ΅

Бпособы ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ DLL Π² 1Π‘

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 сущСствуСт Π΄Π²Π° основных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с внСшними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ:

  1. Π§Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ExternalConnection β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ DLL, зарСгистрированных Π² систСмС.
  2. Π§Π΅Ρ€Π΅Π· 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 загруТаСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ (Π° Π½Π΅ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ).
  • 🐒 ΠŸΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ большиС ΠΎΠ±ΡŠΡ‘ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, массивы).
  • 🐒 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° выполняСт Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСтСвыС запросы).

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  1. ΠšΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DLL:

    Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ экзСмпляр COMΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ стартС систСмы) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

  2. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…:

    Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ большой массив, Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ, Π° Π½Π΅ ΠΏΠΎ элСмСнтам.

  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ асинхронныС Π²Ρ‹Π·ΠΎΠ²Ρ‹:

    Для Π΄ΠΎΠ»Π³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ) запускайтС DLL Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Π°ΡΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°.

  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ "ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти":

    ПослС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с 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) ΠΌΠΎΠ³ΡƒΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ бСзопасности:

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ источники для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ DLL.
  2. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписью, Ссли Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΈΡ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.
  3. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π°Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ внСшниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  4. РСгулярно обновляйтС 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?

НаиболСС частыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  1. НСсовпадСниС Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚Π΅ строку вмСсто числа).
  2. Ошибка Π² самой DLL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, доступ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ памяти).
  3. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ вСрсий зависимостСй (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, отсутствуСт нуТная вСрсия 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 Π½Π° сСрвСрной сторонС.