Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ взаимодСйствия с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ поддСрТиваСтся ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌΠΈ срСдствами, ΠΈΠ»ΠΈ выполнСния спСцифичСских Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (DLL), написанныС Π½Π° языках Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ C++ ΠΈΠ»ΠΈ C#, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ возмоТности встроСнного языка.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ β€” это мост ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΈΡ€ΠΎΠΌ управляСмых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ устройств. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ собствСнной ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ, Ρ€Π°Π±ΠΎΡ‚Ρƒ со спСциализированными сканСрами ΡˆΡ‚Ρ€ΠΈΡ…-ΠΊΠΎΠ΄ΠΎΠ², Ρ„ΠΈΡΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ рСгистраторами ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹ΠΌΠΈ станками Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· ΠΊΠΎΠ΄Π° 1Π‘.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ особСнности взаимодСйствия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ внСшнСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… интСрфСйсах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… камнях рСгистрации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² синтаксис C++, Π½ΠΎ сосрСдоточимся Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ΅ связки 1Π‘ ΠΈ Native API.

АрхитСктура взаимодСйствия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ DLL

Π’ основС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π»Π΅ΠΆΠΈΡ‚ тСхнология COM (Component Object Model). ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ выступаСт Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ. Π‘Π°ΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° строго ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ интСрфСйсов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΌΠΎΠ³Π»Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ свойства.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ элСмСнтом здСсь являСтся интСрфСйс IComponentBase. ИмСнно Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ происходит ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ΅ Ρ€ΡƒΠΊΠΎΠΏΠΎΠΆΠ°Ρ‚ΠΈΠ΅: ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° создаСт экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ список доступных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ свойств. Если ваша Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот интСрфСйс ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, 1Π‘ просто Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ Π²Π°ΡˆΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, Π΄Π°ΠΆΠ΅ Ссли Ρ„Π°ΠΉΠ» DLL Π»Π΅ΠΆΠΈΡ‚ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅.

Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ статичСской ΠΈ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. ΠŸΡ€ΠΈ статичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² рССстрС Windows ΠΈΠ»ΠΈ Linux. ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» "Π½Π° Π»Π΅Ρ‚Ρƒ" прямо ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ распространСниС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ срСди ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с 64-Π±ΠΈΡ‚Π½ΠΎΠΉ вСрсиСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ ваша внСшняя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ скомпилирована строго ΠΏΠΎΠ΄ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ x64. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ 32-Π±ΠΈΡ‚Π½ΡƒΡŽ DLL Π² 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСсс ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² экспорта. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, получСния ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Ошибка Π² сигнатурС хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сдСлаСт всю Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ нСработоской для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ макросы ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ для экспорта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ соглашСниС ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… (stdcall) Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π²Ρ‹Π±ΠΎΡ€ стСка

Π’Ρ‹Π±ΠΎΡ€ инструмСнтов для написания ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ зависит ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π°Π·Π° 1Π‘. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΈ самым Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ остаСтся язык C++ с использованиСм компиляторов Visual Studio ΠΈΠ»ΠΈ GCC. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Однако соврСмСнныС трСбования ΠΊ кроссплатформСнности часто ΠΏΠΎΠ΄Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΊ использованию C# ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ .NET. Π₯отя классичСскиС внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ использования COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² .NET Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Π­Ρ‚ΠΎ позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ Π½Π° Π±ΠΎΠ»Π΅Π΅ высокоуровнСвом языкС.

Π’Π°ΠΌ потрСбуСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» comdef.h ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с COM-интСрфСйсами Π² C++. Если Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Linux (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° сСрвСрах с Ubuntu ΠΈΠ»ΠΈ CentOS), ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠ΄ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ спСцифичСскиС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Windows API, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ рССстр ΠΈΠ»ΠΈ спСцифичныС систСмныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ максимально чистой. Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π»ΠΎΠ³ΠΈΠΊΡƒ взаимодСйствия с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ 1Π‘ Π² Ρ€Π°Π·Π½Ρ‹Π΅ классы. Π­Ρ‚ΠΎ упростит тСстированиС ΠΊΠΎΠ΄Π° Π±Π΅Π· запуска тяТСлой срСды 1Π‘ ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅.

  • πŸ› οΈ УстановитС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Visual Studio с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ C++ desktop development.
  • πŸ“š Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ исходныС ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с ΠΏΠΎΡ€Ρ‚Π°Π»Π° ИВБ ΠΈΠ»ΠΈ GitHub сообщСства 1Π‘.
  • 🐧 Для Linux-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ настройтС кросс-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ с Π½ΡƒΠΆΠ½ΠΎΠΉ ОБ.
  • πŸ” ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, способный_attaching ΠΊ процСссу rphost ΠΈΠ»ΠΈ 1cv8.
πŸ“Š На ΠΊΠ°ΠΊΠΎΠΌ языкС Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ?
C++ (Native)
C# (.NET)
Delphi
Π”Ρ€ΡƒΠ³ΠΎΠΉ язык

РСализация ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсов

Π‘Π΅Ρ€Π΄Ρ†Π΅ΠΌ вашСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ станСт класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс IComponentBase. Π­Ρ‚ΠΎΡ‚ интСрфСйс Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetMethodNames, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², доступных для Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· ΠΊΠΎΠ΄Π° 1Π‘. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ этот список ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ.

Π”Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ CallAsFunc ΠΈ CallAsProc. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ выполняСт дСйствиС Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’Π½ΡƒΡ‚Ρ€ΠΈ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ имя Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· 1Π‘.

Π Π°Π±ΠΎΡ‚Π° с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого внимания ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ tVariant. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ падСния процСсса ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ строки Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ оТидаСтся число.

if (paParams[0].vt == VTYPE_PSTR) {

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строкового ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°

const wchar_t* str = paParams[0].pwstrVal;

// Π›ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

}

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΡ€ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetPropNames, Ссли ваша ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ свойства. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со свойствами Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, Π½ΠΎ раздСляСтся Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (GetPropVal) ΠΈ запись (SetPropVal). Π­Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ состояниСм, сохраняСмым ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π‘Π΅ΠΊΡ€Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ВсСгда ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "ΠŸΡƒΡΡ‚ΠΎ" ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ мусорных Π΄Π°Π½Π½Ρ‹Ρ… Π² 1Π‘ Π² случаС возникновСния ошибки Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

РСгистрация ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

ПослС компиляции DLL Ρ„Π°ΠΉΠ» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступным для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. БущСствуСт Π΄Π²Π° основных ΠΏΡƒΡ‚ΠΈ: систСмная рСгистрация ΠΈ локальноС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. БистСмная рСгистрация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π² администратора ΠΈ внСсСния записСй Π² рССстр Windows (ΠΈΠ»ΠΈ настройки окруТСния Π² Linux).

Для рСгистрации Π² Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° regsvr32. Команда выполняСтся ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ привилСгиями. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния Π² рССстрС ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ записи ΠΎ классС COM ΠΈ Π΅Π³ΠΎ сСрвСрС. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΏΠΎ ProgID ΠΈΠ»ΠΈ CLSID.

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

Бпособ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²Π° Π°Π΄ΠΌΠΈΠ½Π° ΠŸΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ настройки
БистСмная (regsvr32) Π”Π° Низкая БрСдняя
Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ (ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°) НСт Высокая Низкая
Π§Π΅Ρ€Π΅Π· VPN/БСрвис Зависит ΠΎΡ‚ ОБ БрСдняя Высокая

ΠŸΡ€ΠΈ локальном ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π² ΠΊΠΎΠ΄Π΅ 1Π‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Π’Π½Π΅ΡˆΠ½Π΅ΠΉΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ псСвдоним, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ доступна Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ сСансС. Π­Ρ‚ΠΎ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… Π±Π°Π· ΠΈΠ»ΠΈ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±Π΅Π· ΠΏΡ€Π°Π² локального администратора.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ (SQL Π±Π°Π·Π°) внСшняя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ установлСна ΠΈ зарСгистрирована Π½Π° Ρ‚ΠΎΠΌ сСрвСрС, Π³Π΄Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ процСсс rphost, Π° Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

ΠžΡ‚Π»Π°Π΄ΠΊΠ° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ· 1Π‘, β€” Π·Π°Π΄Π°Ρ‡Π° Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ 1Π‘ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΉΡ‚ΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ C++ ΠΊΠΎΠ΄Π°. Π’Π°ΠΌ потрСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшний ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ GDB ΠΈΠ»ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Visual Studio, ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒΡΡ ΠΊ процСссу 1Π‘ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

НастройтС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Visual Studio Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ запускС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΎΠ½ запускал исполняСмый Ρ„Π°ΠΉΠ» 1cv8.exe ΠΈΠ»ΠΈ rphost.exe с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ запуска вашСй Π±Π°Π·Ρ‹. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Ρ€Π΅ΠΉΠΊΠΏΠΎΠΈΠ½Ρ‚Ρ‹ прямо Π² ΠΊΠΎΠ΄Π΅ DLL ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ шаг Π·Π° шагом.

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π›ΡŽΠ±ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ C++ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль ΠΈΠ»ΠΈ доступ ΠΊ null-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ всСго процСсса 1Π‘. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ΠΎΠΊΠ½ΠΎ "1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ".

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±Π»ΠΎΠΊΠΈ try-catch Π²ΠΎΠΊΡ€ΡƒΠ³ всСй Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ случаС ошибки Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ понятноС сообщСниС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² 1Π‘ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ описания ошибок, Π° Π½Π΅ ΠΊΡ€Π°ΡˆΡŒΡ‚Π΅ процСсс. Π­Ρ‚ΠΎ сохранит Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

β˜‘οΈ Π§Π΅ΠΊ-лист ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 5

РаспространСниС ΠΈ вСрсионированиС

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ вСрсии ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Если Ρ„Π°ΠΉΠ» DLL занят процСссом 1Π‘, опСрационная систСма Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π’Π°ΠΌ придСтся ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Для сСрвСрных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² установки цСлСсообразно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ скрипты развСртывания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ автоматичСски Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΏΡ€ΠΈ установкС обновлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ снимаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ с систСмных администраторов ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ чСловСчСский Ρ„Π°ΠΊΡ‚ΠΎΡ€.

Π’Π΅Π΄ΠΈΡ‚Π΅ ΠΆΡƒΡ€Π½Π°Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (Changelog) для вашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ внСшняя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° являСтся Ρ‡Π΅Ρ€Π½Ρ‹ΠΌ ящиком для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° программистов 1Π‘, докумСнтация ΠΏΠΎ измСнСниям Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ свойствах ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.

πŸ’‘

ИдСальная стратСгия распространСния β€” Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ DLL Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘ с автоматичСской Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ вСрсий ΠΊΠΎΠ΄Π° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ 1Π‘?

НСт, внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (DLL) Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² толстом ΠΈ Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° сСрвСрС 1Π‘. Π’Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈΠ· сообраТСний бСзопасности. Для Π²Π΅Π±Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HTTP-сСрвисы.

Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив ΠΈΠ· 1Π‘ Π²ΠΎ внСшнюю ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ?

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° tVariant с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ элСмСнтами. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Π°ΠΌ потрСбуСтся рСкурсивно ΠΎΠ±ΠΎΠΉΡ‚ΠΈ массив, провСряя Ρ‚ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта. ΠŸΡ€ΡΠΌΠΎΠΉ доступ ΠΊ памяти массива 1Π‘ ΠΈΠ· Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ прСдусмотрСн стандартом интСрфСйса.

НуТно Π»ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ сСртификатом Ρ„Π°ΠΉΠ» DLL?

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Windows 10/11 ΠΈ особСнно Π½Π° сСрвСрах с усилСнной ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ бСзопасности, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΈ DLL Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ сСртификатом. Π‘Π΅Π· подписи систСма ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, считая Π΅Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасной, особСнно Ссли ΠΎΠ½Π° обращаСтся ΠΊ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅, Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π΅Π»ΠΈΠ·Π΅?

Частая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° β€” отсутствиС зависимых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (DLL) Π² ΠΏΠ°ΠΏΠΊΠ΅ с вашСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ Π² систСмном ΠΏΡƒΡ‚ΠΈ PATH. Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Visual Studio ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ· своСй ΠΏΠ°ΠΏΠΊΠΈ, Π° Π² Ρ€Π΅Π»ΠΈΠ·Π΅ ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ инструмСнт Dependency Walker для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.