ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ поиска winrt Ρ‡Ρ‚ΠΎ это

Π’ Ρ†Π΅Π»ΠΎΠΌ систСма Windows 8 рассчитана Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΈ Windows 7, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° Π±Π°Π·Π΅ 32- ΠΈΠ»ΠΈ 64-разрядных микропроцСссоров Intel Ρ…86. БистСма сущСствуСт Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ просто Β«Windows 8Β», ΠΈ Π² ΠΈΠ·Π΄Π°Π½ΠΈΠΈ Β«Windows 8 ProΒ» с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… энтузиастов ΠΈ профСссионалов. Как Π² Windows 8, Ρ‚Π°ΠΊ ΠΈ Π² Windows 8 Pro ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²:

НовыС прилоТСния Windows 8, часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ прилоТСниями Windows Store.

ΠΠ°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Windows-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows 7 ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Ρ‡Π΅Ρ€Π΅Π· интСрфСйс ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ программирования Windows, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Win32 API. Для запуска Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Windows 8 Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол Windows. Для ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, WPF (Windows Presentation Foundation).

ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Ρ…ΠΎΠ΄ ΠΎΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Windows. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² полноэкранном Ρ€Π΅ΠΆΠΈΠΌΠ΅ (хотя Π΄Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ экран Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Snap View) ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ для ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚ΠΎΠ² ΠΈ сСнсорных экранов. Π­Ρ‚ΠΈ прилоТСния ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, находящСгося ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Microsoft. (Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прилоТСния нСпосрСдствСнно ΠΈΠ· Visual Studio.)

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ программиста Windows Runtime Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Silverlight, хотя Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ API Π½Π΅ являСтся управляСмым. ВСроятно, для программистов Silverlight самоС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ связано с пространствами ΠΈΠΌΠ΅Π½: пространства ΠΈΠΌΠ΅Π½ Silverlight, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с System.Windows, Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ пространствами, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ с Windows.UI.Xaml.

ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ поиска winrt Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ поиска winrt Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ поиска winrt Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ поиска winrt Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ поиска winrt Ρ‡Ρ‚ΠΎ это

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows 8 состоит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ ΠΈΠ· Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ отраслСвой стандарт HTML (HyperText Markup Language) ΠΈΠ»ΠΈ принятый Microsoft язык XAML (extensible Application Markup Language). Π’ частности, прСимущСствам разбиСния прилоТСния Π½Π° ΠΊΠΎΠ΄ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ относится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ распрСдСлСния процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ программистами ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Π’ настоящСС врСмя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ основных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° программирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows 8, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основан Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ языкС программирования ΠΈ языкС Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ:

C# ΠΈΠ»ΠΈ Visual Basic ΠΈ XAML;

JavaScript ΠΈ HTML5.

Для программистов JavaScript срСда Windows Runtime дополняСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ WinJS (Windows Library for JavaScript), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ систСмного уровня для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows 8.

ПослС Π΄ΠΎΠ»Π³ΠΈΡ… Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ (ΠΈ Π΄ΡƒΡˆΠ΅Π²Π½Ρ‹Ρ… Ρ‚Π΅Ρ€Π·Π°Π½ΠΈΠΉ) я Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ этот Ρ€Π°Π·Π΄Π΅Π» нашСго сайта Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ посвящСн Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ WinRT Π½Π° C# ΠΈ XAML. МСня ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚ ΡƒΠ±Π΅ΠΆΠ΄Π°Π»ΠΈ Π² прСимущСствах управляСмых языков для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΈ Π½Π° ΠΌΠΎΠΉ взгляд, C# Π»ΡƒΡ‡ΡˆΠ΅ всСх языков ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Windows Runtime. НадСюсь, ΠΊΠΎΠ΄ C# Π±ΡƒΠ΄Π΅Ρ‚ достаточно понятСн программистам C++ ΠΈ JavaScript.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² COM с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C++/WinRT

C++/WinRT ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ классичСских ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ COM (ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… классов), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эта проСкция языка ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ классы срСды выполнСния Windows. Π”Π°Π»Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

ПовСдСниС C++/WinRT ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ использовании COM-интСрфСйсов

Π’ C++/ WinRT winrt::implements являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ шаблоном, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ косвСнно Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ классы срСды выполнСния ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ winrt::implements автоматичСски ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ классичСскиС интСрфСйсы COM. Π›ΡŽΠ±Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ QueryInterface (QI) классичСских COM-интСрфСйсов Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ ошибкой E_NOINTERFACE. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ winrt::implements ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйсы C++/WinRT.

Π”Π°Π»Π΅Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° интСрфСйсы Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Но сначала ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

А Π²ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для получСния класса Sample.

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ классичСских интСрфСйсов COM

Π₯ΠΎΡ€ΠΎΡˆΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для Π²Ρ‹Π·ΠΎΠ²Π° winrt::implementsдля Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ классичСских интСрфСйсов COM трСбуСтся просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² C++/WinRT.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ as для классичСских интСрфСйсов COM, ΠΈ ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ скомпилирован.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли Π²Ρ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ классичСских интСрфСйсов COM Π½Π° сСрвСрС (ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ класс), Π΄Π°ΠΆΠ΅ послС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ классичСских интСрфСйсов COM Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ класс) Π²Ρ‹Π·ΠΎΠ² as Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ сбоСм, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ QI для IInitializeWithWindow Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ (Π½Π΅ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ) класс

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс β€” это Ρ‚Π°ΠΊΠΎΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСализуСтся ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ компиляции (Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅), поэтому для Π½Π΅Π³ΠΎ отсутствуСт проСкция.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ локального класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классичСскиС интСрфСйсы COM.

Если Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ классичСских интСрфСйсов COM, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ ошибкой.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, IInitializeWithWindow Π½Π΅ распознаСтся ΠΊΠ°ΠΊ интСрфСйс COM, поэтому C++/WinRT ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ. Π’ случаС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ LocalObject Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ игнорирования интСрфСйсов COM ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ LocalObject Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ интСрфСйсов. Но ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс COM Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ интСрфСйс.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ COM-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

Π‘ΠΎΠ»Π΅Π΅ рСалистичный ΠΈ интСрСсный ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части этой ΡΡ‚Π°Ρ‚ΡŒΠΈ описан процСсс создания минимального ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° консольного прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ C++/WinRT для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° COM ΠΈΠ»ΠΈ класса COM) ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ классов. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прилоТСния ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ класс (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс COM INotificationActivationCallback) позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ эту ΠΊΠ½ΠΎΠΏΠΊΡƒ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± области примСнСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ увСдомлСния ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° локального Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ увСдомлСния. Однако Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ΄Π° Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ C++/WinRT, поэтому ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° консольного прилоТСния для Windows (ToastAndCallback)

НачнитС с создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Microsoft Visual Studio. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ консольного прилоТСния для Windows (C++/WinRT) ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ ToastAndCallback.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» pch.h ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ #include ΠΏΠ΅Ρ€Π΅Π΄ добавлСниями для любого Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° C++/WinRT. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° pch.h этим Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» main.cpp ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ создаСт шаблон ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ВмСсто Π½ΠΈΡ… Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ²). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° main.cpp этим Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ (ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ ΠΈΠ· main Π²ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ Π½ΠΈΠΆΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ).

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. ПослС добавлСния ΠΊΠΎΠ΄Π° Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ сборку ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

РСализация ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ классов

Π’ C++/WinRT Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Π΅ классы ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ классов Π½Π° основС Π±Π°Π·ΠΎΠ²ΠΎΠΉ структуры winrt::implements. Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ этот ΠΊΠΎΠ΄ сразу послС Ρ‚Ρ€Π΅Ρ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² using, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ (ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ main ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ‚ΠΎΡ€Π° COM Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ увСдомлСния.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Π°Ρ Π²Ρ‹ΡˆΠ΅ рСализация ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса выполняСтся ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ схСмС, которая продСмонстрирована Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ интСрфСйсов API с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C++/WinRT. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйсы COM ΠΈ интСрфСйсы срСды выполнСния Windows ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ COM ΠΈ классы срСды выполнСния Windows ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ доступ ΠΊ функциям с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ интСрфСйс COM Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ наслСдуСтся ΠΎΡ‚ интСрфСйса IUnknown. Π‘Ρ€Π΅Π΄Π° выполнСния Windows основана Π½Π° COM с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ β€” интСрфСйсы срСды выполнСния Windows Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ интСрфСйса IInspectable (Π° IInspectable наслСдуСтся ΠΎΡ‚ IUnknown).

Π’ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠΌ классС Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ INotificationActivationCallback::Activate. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, которая вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ. Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса. Π­Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ IClassFactory::CreateInstance.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ, извСстСн ΠΊΠ°ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ‚ΠΎΡ€ COM для ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ. Он ΠΈΠΌΠ΅Π΅Ρ‚ свой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ класса (CLSID) Π² Π²ΠΈΠ΄Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° (Ρ‚ΠΈΠΏΠ° GUID), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ·ΠΆΠ΅ β€” Π² Π²ΠΈΠ΄Π΅ ярлыка мСню «ΠŸΡƒΡΠΊ» ΠΈ записи рССстра Windows. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ CLSID Π°ΠΊΡ‚ΠΈΠ²Π°Ρ‚ΠΎΡ€Π° COM ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ связанному с Π½ΠΈΠΌ сСрвСру COM (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ здСсь создаСм) β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ свСдСния ΠΎ классС, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° (нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π°ΠΆΠ°Ρ‚ΠΎ Π»ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² Π¦Π΅Π½Ρ‚Ρ€Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ).

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² COM

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок ΠΈ управлСния рСсурсами ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ совмСстно. Π£Π΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π° Π½Π΅ ΠΊΠΎΠ΄Ρ‹ ошибок. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠ΄ΠΈΠΎΠΌΡƒ «ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ рСсурса β€” инициализация» (RAII), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ явной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΊΠΎΠ΄Ρ‹ ошибок ΠΈ явного освобоТдСния рСсурсов. Π’Π°ΠΊΠΈΠ΅ явныС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ваш ΠΊΠΎΠ΄ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ошибки ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ RAII ΠΈ создавайтС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, выдСлСния рСсурсов Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ простым.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

РСализация ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° wmain

Π£Π΄Π°Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ main ΠΈ вмСсто Π½Π΅Π΅ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠΎΠ΄ для рСгистрации ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса ΠΈ ΠΊΠΎΠ΄ для доставки Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ увСдомлСния, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° прилоТСния

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ запуститС Π΅Π³ΠΎ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ рСгистрации ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… настроСк. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, запустив Visual Studio ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора, Π° Π·Π°Ρ‚Π΅ΠΌ запустив ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Visual Studio. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Visual Studio ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ список ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Visual Studio ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π² спискС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Запуск ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора. ΠŸΡ€ΠΈΠΌΠΈΡ‚Π΅ запрос ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Когда Π²Ρ‹ запускаСтС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, отобраТаСтся сообщСниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора. Если это Π½Π΅ Ρ‚Π°ΠΊ, рСгистрация ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ настройки Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. Π­Ρ‚Ρƒ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ настройки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ T, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠ»ΠΎΡΡŒ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Call back ToastAndCallback (ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ToastAndCallback) нСпосрСдствСнно ΠΈΠ· Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ увСдомлСния ΠΈΠ»ΠΈ ΠΈΠ· Ρ†Π΅Π½Ρ‚Ρ€Π° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ запустится ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ создан экзСмпляр ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ INotificationActivationCallback::Activate.

ВнутрипроцСссный сСрвСр COM

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ динамичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (DLL)

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ создания внутрипроцСссного сСрвСра COM, создав ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Microsoft Visual Studio. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Visual C++ ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Windows Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° динамичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (DLL).

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ C++/WinRT Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ дСйствия, описанныС Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ C++/WinRT Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ классичСского прилоТСния для Windows.

РСализация ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса, Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ класса ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ экспорта внутрипроцСссного сСрвСра

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» dllmain.cpp ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ тСкст ΠΊΠΎΠ΄Π°.

Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° DLL, которая Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ классы срСды выполнСния Windows C++/WinRT, Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ функция DllCanUnloadNow, показанная Π½ΠΈΠΆΠ΅. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Π΅ классы Π² эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ DLL, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DllGetClassObject.

Если Ρƒ вас Π½Π΅Ρ‚ ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ шаблонов C++ для срСды выполнСния Windows (WRL), с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ части WRL ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° для слабых ссылок

ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ с Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ Π‘Π»Π°Π±Ρ‹Π΅ ссылки Π² C++/WinRT.

C++/WinRT (Π² частности, шаблон Π±Π°Π·ΠΎΠ²ΠΎΠΉ структуры winrt::Implements) Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ IWeakReferenceSource, Ссли Ρ‚ΠΈΠΏ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ IInspectable (ΠΈΠ»ΠΈ любой интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ IInspectable).

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ IWeakReferenceSource ΠΈ IWeakReference ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ² срСды выполнСния Windows. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ слабых ссылок для своСго ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ класса, просто Π΄ΠΎΠ±Π°Π²ΠΈΠ² winrt::Windows::Foundation::IInspectable (ΠΈΠ»ΠΈ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ IInspectable) ΠΊ вашСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

РСализация COM-интСрфСйса, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ

НаслСдованиС интСрфСйса β€” это концСпция классичСского COM (ΠΈ Π² срСдС выполнСния Windows ΠΎΠ½Π° Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΡƒΠΏΡ€Π°Π·Π΄Π½Π΅Π½Π°). НиТС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ наслСдования интСрфСйса.

Если Π²Ρ‹ создаСтС класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Π° интСрфСйса IFileSystemBindData ΠΈ IFileSystemBindData2, сначала потрСбуСтся ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ интСрфСйс, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅.

Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ интСрфСйс QueryInterface ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» Π²Ρ‹Π·ΠΎΠ²Ρ‹ (прямыС ΠΈ косвСнныС) ΠΊ IID_IFileSystemBindData (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ интСрфСйс) Π² экзСмплярС MyFileSystemBindData. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для шаблона Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈwinrt::is_guid_of.

WinRT::is_guid_of ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², поэтому Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ список интСрфСйсов. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° IFileSystemBindData2 Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ для IFileSystemBindData.

БпСциализация winrt::is_guid_of Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΠΉ для всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅, Π³Π΄Π΅ интСрфСйс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ шаблоном winrt::implements ΠΈΠ»ΠΈ winrt::delegate. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для этого Π΅Π΅ слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с C++/WinRT

БвСдСния ΠΎΠ± установкС Visual Studio для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с использованиСм C++/WinRT, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ установку ΠΈ использованиС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ C++/WinRT для Visual Studio (VSIX) ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° NuGet (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вмСстС ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ шаблона ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ сборки), ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Visual Studio для C++/WinRT.

Π₯отя ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ с послСдними вСрсиями Visual Studio ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Windows SDK, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Visual Studio 2017 (вСрсия 15.8.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅) ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для ΠΏΠ°ΠΊΠ΅Ρ‚Π° Windows SDK вСрсии 10.0.17134.0 (Windows 10 вСрсии 1803), Ρ‚ΠΎ созданный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ C++/WinRT ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ C3861 ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ from_abi Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ошибки, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π² base.h. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ (Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ) вСрсиСй Windows SDK ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ свойство ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° C/C++ Π―Π·Ρ‹ΠΊ Π Π΅ΠΆΠΈΠΌ совмСстимости: НСт (ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ /permissive- отобраТаСтся Π² свойствС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° C/C++ Π―Π·Ρ‹ΠΊ Командная строка Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΅Π³ΠΎ).

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство ΠΏΠΎ C++/WinRT

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ pch.h ΠΈ main.cpp ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅ с объяснСниСм Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ содСрТат API-интСрфСйсы Windows, ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π² C++/WinRT. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Windows проСкция C++/WinRT опрСдСляСт эквивалСнтный Ρ‚ΠΈΠΏ для C++ (ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ). ΠŸΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚ΠΈΠΏ Π² Windows, Π½ΠΎ ΠΎΠ½ размСщаСтся Π² пространствС ΠΈΠΌΠ΅Π½ C++ winrt. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ этих инструкций include Π² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированный Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ сокращаСт врСмя сборки.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using namespace ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ шаблон для Ρ‚Π°ΠΊΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² (ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск Π»ΡŽΠ±Ρ‹Ρ… элСмСнтов Π² пространствС ΠΈΠΌΠ΅Π½ winrt ΠΏΠΎ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ) ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΏΡ€ΠΈ этом C++/WinRT β€” СдинствСнная проСкция языка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Если, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π²Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ C++/WinRT с ΠΊΠΎΠ΄ΠΎΠΌ C++/CX ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ интСрфСйсом прилоТСния SDK (ABI) (Π²Ρ‹ осущСствляСтС пСрСнос ΠΈΠ»ΠΈ взаимодСйствуСтС с этим ΠΊΠΎΠ΄ΠΎΠΌ Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±Π΅ этих ΠΌΠΎΠ΄Π΅Π»ΠΈ), ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ C++/WinRT ΠΈ C++/CX, ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° C++/WinRT ΠΈΠ· C++/CX ΠΈ ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ C++/WinRT ΠΈ интСрфСйсом ABI.

Π’Ρ‹Π·ΠΎΠ² winrt::init_apartment ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π² срСдС выполнСния Windows (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ). Π’Ρ‹Π·ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ COM.

РазмСститС Π² стСкС Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ URI Π±Π»ΠΎΠ³Π° ΠΎ Windows ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ синдикации. ΠœΡ‹ создаСм URI с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ строки (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ способы Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строк Π² C++/WinRT).

SyndicationClient::RetrieveFeedAsync являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ асинхронной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ срСды выполнСния Windows. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ RetrieveFeedAsync ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ get для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это Π²Π΅Π±-ΠΊΠ°Π½Π°Π» синдикации). Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ асинхронныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C++/WinRT.

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ тСкст Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΊΠ°Π½Π°Π»Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° winrt::hstring (см. свСдСния Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строк Π² C++/WinRT). Π—Π°Ρ‚Π΅ΠΌ hstring выводится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ c_str, которая ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ шаблон, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² строках стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C++.

Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° HRESULT. C++/ WinRT ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ошибки HRESULT Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ winrt::hresult-error, для использования СстСствСнного ΠΈ соврСмСнного стиля программирования. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² C++/WinRT.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ C++/WinRT Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ классичСского прилоТСния для Windows

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ C++/WinRT Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ классичСского прилоТСния для Windows. Если Ρƒ вас Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° классичСского прилоТСния для Windows, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эти шаги, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ. НапримСр, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Visual Studio ΠΈ создайтС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Visual C++ Π Π°Π±ΠΎΡ‡ΠΈΠΉ стол Windows ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Windows.

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ C++/WinRT для Visual Studio (VSIX) ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ NuGet. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ C++/WinRT Π² Visual Studio.

Настройка свойств ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ свойству ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠžΠ±Ρ‰ΠΈΠ΅ ВСрсия ΠΏΠ°ΠΊΠ΅Ρ‚Π° SDK для Windows ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ВсС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ ВсС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ для вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚Π° Windows SDK установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10.0.17134.0 (Windows 10 вСрсии 1803) ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅.

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, описанная Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ компилируСтся?.

Π’Π°ΠΊ ΠΊΠ°ΠΊ C++/WinRT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ стандарта C++17, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для свойства ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° C/C++ Π―Π·Ρ‹ΠΊ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ языка C++ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ISO C++17 (/std:c++17).

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скомпилированный Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

БвязываниС

Языковая проСкция C++/WinRT зависит ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… свободных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ срСды выполнСния Windows (Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ) ΠΈ Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ…ΠΎΠ΄Π°, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся связываниС с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ WindowsApp.lib. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° соотвСтствия ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Visual Studio всС свойства ΠΈ Ρ†Π΅Π»ΠΈ C++/WinRT MSBuild. Для этого установитС ΠΏΠ°ΠΊΠ΅Ρ‚ NuGet Microsoft.Windows.CppWinRT Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Visual Studio ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ NuGet. ΠžΠ±Π·ΠΎΡ€, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Microsoft.Windows.CppWinRT Π² ΠΏΠΎΠ»Π΅ поиска, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ элСмСнт Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… поиска, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ C++/WinRT Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ‚ΠΎΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство ΠΏΠΎ C++/WinRT Π²Ρ‹ΡˆΠ΅).

Π’Ρ€ΠΈ основных сцСнария для C++/WinRT

По ΠΌΠ΅Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с C++/WinRT ΠΈ ознакомлСния с ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²Ρ‹, скорСС всСго, Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ основных сцСнария. Они описаны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

ИспользованиС API ΠΈ Ρ‚ΠΈΠΏΠΎΠ² срСды выполнСния Windows

Π˜Π½Ρ‹ΠΌΠΈ словами, это использованиС ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ API. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ API для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ Bluetooth, ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈ воспроизвСдСниС Π²ΠΈΠ΄Π΅ΠΎ, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ Windows ΠΈ Ρ‚. Π΄. Π’ C++/WinRT Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° этого сцСнария. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ИспользованиС API-интСрфСйсов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C++/WinRT.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ API ΠΈ Ρ‚ΠΈΠΏΠΎΠ² срСды выполнСния Windows

Π˜Π½Ρ‹ΠΌΠΈ словами, это созданиС API ΠΈ Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ описанныС Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ΡˆΠ΅ Ρ‚ΠΈΠΏΡ‹ API, графичСскиС API, API Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, сСтСвыС API ΠΈ Ρ‚. Π΄. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ API-интСрфСйсов Π² C++/WinRT.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° API с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C++/WinRT β€” это Π±ΠΎΠ»Π΅Π΅ слоТный процСсс, Ρ‡Π΅ΠΌ ΠΈΡ… использованиС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с IDL для опрСдСлСния API ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. ОписаниС процСсса см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ управлСния XAML; привязка ΠΊ свойству C++/WinRT.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ XAML

Π­Ρ‚ΠΎΡ‚ сцСнарий ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ элСмСнтов управлСния Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС Π½Π° основС XAML. Π Π°Π±ΠΎΡ‚Π° с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, созданным с использованиСм XAML, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ процСссы использования ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сСгодня XAML являСтся основным срСдством описания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π² Windows, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ влияниС Π½Π° срСду выполнСния Windows ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ этому, для Π½Π΅Π³ΠΎ прСдусмотрСн ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сцСнарий.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ XAML Π»ΡƒΡ‡ΡˆΠ΅ всСго сочСтаСтся с языками программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ рСфлСксия. Π’ C++/WinRT, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с XAML, ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. ВсС эти случаи описаны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ всСго Π½Π°Ρ‡Π°Ρ‚ΡŒ со статСй Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ управлСния XAML; привязка ΠΊ свойству C++/WinRT ΠΈ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… (Π½Π° основС шаблона) элСмСнтов управлСния XAML с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ C++/WinRT.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

C#/WinRT

ОбоснованиС для использования C#/WinRT

C#/WinRT Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ SDK для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для Windows, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ WinUI 3. ΠŸΠ°ΠΊΠ΅Ρ‚ SDK для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для Windows Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· ОБ собствСнныС элСмСнты управлСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ собствСнныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ новСйшиС элСмСнты управлСния ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Windows 10 вСрсии 1809 ΠΈ Π²Ρ‹ΡˆΠ΅.

НовоС

ПослСдниС выпуски C#/WinRT ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° страницС Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΎ выпускС Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitHub.

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

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ распространСниС сборки взаимодСйствия

Бсылка Π½Π° сборку взаимодСйствия

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π° сборки взаимодСйствия C#/WinRT ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Однако Π½Π° Π½ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ сборки взаимодСйствия. НапримСр, сборка взаимодСйствия WinUI ссылаСтся Π½Π° сборку взаимодСйствия Windows SDK.

Если Π²Ρ‹ распространяСтС сторонний ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ WinRT Π±Π΅Π· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сборки взаимодСйствия, для создания собствСнных частных источников ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ создания сборки взаимодСйствия. ΠœΡ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса. Для прСдотвращСния Ρ‚Π°ΠΊΠΈΡ… ситуаций ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ NuGet, созданныС ΠΏΠΎ схСмС сСмантичСского вСрсионирования. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ сборку взаимодСйствия стороннСго производитСля.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° внСдрСния для Ρ‚ΠΈΠΏΠΎΠ² WinRT (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия)

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π½ΠΈΡŽ C#/WinRT Π² нашСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Активация Ρ‚ΠΈΠΏΠ° WinRT

C#/WinRT ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ² WinRT, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π° Ρ‚Π°ΠΊΠΆΠ΅ сторонних ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Win2D. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ сторонних ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² классичСском ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ WinRT Π±Π΅Π· рСгистрации, доступной Π² Windows 10 вСрсии 1903 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ…. Если ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ создан ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ UWP, для Π½Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚ сСрвСров пСрСсылки VCRT.

C#/WinRT Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ, Ссли Windows Π½Π΅ удаСтся Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅. Π’ этом случаС C#/WinRT пытаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ располоТСниС собствСнной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° основС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΈΠΏΠ°, постСпСнно удаляя элСмСнты. НапримСр, рСзСрвная Π»ΠΎΠ³ΠΈΠΊΠ° попытаСтся Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Contoso.Controls.Widget ΠΈΠ· пСрСчислСнных Π½ΠΈΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

C#/WinRT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для поиска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ DLL Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ порядок поиска LoadLibrary. ΠŸΠ°ΠΊΠ΅Ρ‚ прилоТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ прСдусмотрСно использованиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ способа, наряду с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ прилоТСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ DLL Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

РаспространСнныС ошибки ΠΈ ΠΈΡ… устранСниС

Ошибка: «Windows Metadata not provided or detected» (ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Windows Π½Π΅ прСдоставлСны ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹).

Error CS0246: The type or namespace name «Windows» could not be found (are you missing a using directive or an assembly reference?) (Ошибка CS0246. НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ имя пространства ΠΈΠΌΠ΅Π½ Windows (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, отсутствуСт Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using ΠΈΠ»ΠΈ ссылка Π½Π° сборку)).

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°
ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ MSB3277. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вСрсиями WinRT.Runtime ΠΈΠ»ΠΈ Microsoft.Windows.SDK.NET, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ.Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ сборки Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ссылкС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, которая прСдоставляСт Ρ‚ΠΈΠΏΡ‹ Windows SDK Π½Π° своСй повСрхности API.
Ошибка CS1705. Π‘Π±ΠΎΡ€ΠΊΠ° «AssemblyName1» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ «TypeName» Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ вСрсии, Ρ‡Π΅ΠΌ сборка «AssemblyName2», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ даСтся ссылкаЭта ошибка компилятора сборки Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΈ использовании Ρ‚ΠΈΠΏΠΎΠ² Windows SDK, прСдставлСнных Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.
System.IO.FileLoadExceptionΠ­Ρ‚Π° ошибка срСды выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… API Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, которая Π½Π΅ прСдоставляСт Ρ‚ΠΈΠΏΡ‹ Windows SDK.

Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ критичСскиС измСнСния ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ C#/WinRT Π² GitHub.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *