Przenoszenie na platformę uniwersalną systemu Windows (C++)

W tym temacie można znaleźć informacje na temat przenoszenia istniejącego kodu C++ na platformę aplikacji systemu Windows , platforma uniwersalna systemu Windows. Termin uniwersalny oznacza, że kod może działać na dowolnym urządzeniu z systemem Windows 10 lub nowszym. Utworzysz pojedynczy projekt i jeden podstawowy interfejs użytkownika XAML, który działa dobrze na dowolnym urządzeniu z systemem Windows 10 lub nowszym. Możesz użyć funkcji układu dynamicznego w języku XAML, aby umożliwić interfejsowi użytkownika aplikacji dostosowanie się do różnych rozmiarów wyświetlania.

Dokumentacja Centrum deweloperów systemu Windows zawiera przewodnik przenoszenia aplikacji systemu Windows 8.1 do platforma uniwersalna systemu Windows. Zobacz Przenoszenie z środowisko wykonawcze systemu Windows 8 do platformy UWP. Chociaż przewodnik koncentruje się głównie na kodzie języka C#, większość wskazówek dotyczy języka C++. Poniższe procedury zawierają bardziej szczegółowe informacje. Zobacz również Przenoszenie z aplikacji klasycznej do platformy UWP.

Ten temat zawiera następujące procedury przenoszenia kodu do platformy UWP.

Jeśli masz klasyczną bibliotekę DLL Win32 i chcesz ją wywołać z aplikacji platformy UWP, możesz to zrobić również. Korzystając z takich procedur, można utworzyć warstwę interfejsu użytkownika platformy uniwersalnej systemu Windows dla istniejącej klasycznej aplikacji klasycznej systemu Windows C++ lub standardowego kodu C++ dla wielu platform. Zobacz Instrukcje: używanie istniejącego kodu C++ w aplikacji platforma uniwersalna systemu Windows.

Przenoszenie aplikacji ze sklepu Windows 8.1 do platformy UWP

Jeśli masz aplikację ze sklepu Dla systemu Windows 8.1, możesz użyć tej procedury, aby umożliwić jej pracę na platformie UWP i dowolnym urządzeniu z systemem Windows 10 lub nowszym. Warto najpierw skompilować projekt przy użyciu programu Visual Studio 2019 jako projektu systemu Windows 8.1, aby najpierw wyeliminować wszelkie problemy wynikające ze zmian w kompilatorze i bibliotekach. Po wykonaniu tej czynności istnieją dwa sposoby konwertowania tego na projekt platformy UWP systemu Windows. Najprostszym sposobem (jak wyjaśniono w poniższej procedurze) jest utworzenie projektu uniwersalnego systemu Windows i skopiowanie istniejącego kodu do niego. Jeśli używasz projektu uniwersalnego dla systemu Windows 8.1 desktop i Windows 8.1 Telefon, projekt rozpocznie się od dwóch różnych układów w języku XAML, ale kończy się jednym dynamicznym układem, który dostosowuje się do rozmiaru ekranu.

Aby przełączyć aplikację ze sklepu Windows 8.1 na platformę UWP

  1. Jeśli jeszcze tego nie zrobiono, otwórz projekt aplikacji systemu Windows 8.1 w programie Visual Studio 2017 i postępuj zgodnie z instrukcjami, aby uaktualnić plik projektu.

    Musisz zainstalować narzędzia systemu Windows 8.1 w konfiguracji programu Visual Studio . Jeśli nie masz zainstalowanych tych narzędzi, uruchom instalatora programu Visual Studio w oknie Programy i funkcje , wybierz pozycję Visual Studio 2017, a następnie w oknie konfiguracji wybierz pozycję Modyfikuj. Znajdź narzędzia systemu Windows 8.1, upewnij się, że jest zaznaczone, a następnie wybierz przycisk OK.

  2. Otwórz okno Właściwości projektu i w obszarze C++>General ustaw zestaw narzędzi platformy na v141, zestaw narzędzi dla programu Visual Studio 2017.

  3. Skompiluj projekt jako projekt systemu Windows 8.1 i rozwiąż wszelkie błędy kompilacji. Wszelkie błędy na tym etapie są prawdopodobnie spowodowane zmianami powodujących niezgodność w narzędziach i bibliotekach kompilacji. Aby uzyskać szczegółowe wyjaśnienie zmian, które mogą mieć wpływ na kod, zobacz Historia zmian w języku Visual C++ 2003 – 2015 .

    Gdy projekt zostanie skompilowane w sposób czysty, możesz przystąpić do przenoszenia do platforma uniwersalna systemu Windows.

  4. Utwórz nowy projekt aplikacji uniwersalnej systemu Windows przy użyciu szablonu Puste. Możesz nadać mu taką samą nazwę jak istniejący projekt, chociaż w celu wykonania tych projektów muszą znajdować się w różnych katalogach.

  5. Zamknij rozwiązanie, a następnie za pomocą Eksploratora Windows lub wiersza polecenia skopiuj pliki kodu (z rozszerzeniami .cpp, .h i xaml) z projektu systemu Windows 8.1 do tego samego folderu co plik projektu (vcxproj) dla projektu utworzonego w kroku 1. Nie należy kopiować pliku Package.appxmanifest, a jeśli masz oddzielny kod dla systemu Windows 8.1 desktop i telefon, wybierz jeden z nich do portu jako pierwszy (musisz wykonać pewną pracę później, aby dostosować się do drugiego). Pamiętaj, aby skopiować i podfoldery oraz ich zawartość. Jeśli zostanie wyświetlony monit, wybierz zamianę wszystkich plików na zduplikowane nazwy.

  6. Otwórz ponownie rozwiązanie i wybierz pozycję Dodaj>istniejący element z menu skrótów dla węzła projektu. Zaznacz wszystkie skopiowane pliki, z wyjątkiem wszystkich plików, które są już częścią projektu.

    Sprawdź wszystkie podfoldery i upewnij się, że dodaj do nich również pliki.

  7. Jeśli nie używasz tej samej nazwy projektu co stary projekt, otwórz plik Package.appxmanifest i zaktualizuj punkt wejścia, aby odzwierciedlić nazwę przestrzeni nazw klasy App .

    Pole Punkt wejścia w pliku Package.appxmanifest zawiera nazwę o określonym zakresie dla App klasy, która zawiera przestrzeń nazw zawierającą klasę App . Podczas tworzenia projektu uniwersalnego systemu Windows przestrzeń nazw jest ustawiana na nazwę projektu. Jeśli różni się to od tego, co znajduje się w plikach skopiowanych ze starego projektu, musisz zaktualizować jeden lub drugi, aby były zgodne.

  8. Skompiluj projekt i rozwiąż wszelkie błędy kompilacji z powodu zmian powodujących niezgodność między różnymi wersjami zestawu Windows SDK.

  9. Uruchom projekt na pulpicie lokalnym. Sprawdź, czy nie ma błędów wdrażania i czy układ aplikacji wygląda rozsądnie i czy działa prawidłowo na pulpicie.

  10. Jeśli masz oddzielne pliki kodu i plik xaml dla innego urządzenia, takiego jak Windows Telefon 8.1, sprawdź ten kod i zidentyfikuj, gdzie różni się od standardowego urządzenia. Jeśli różnica występuje tylko w układzie, możesz użyć menedżera programu Visual State Manager w pliku xaml, aby dostosować ekran w zależności od rozmiaru ekranu. W przypadku innych różnic można użyć sekcji warunków w kodzie, korzystając z poniższych instrukcji #if.

    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
    

    Te instrukcje dotyczą odpowiednio aplikacji platformy UWP, aplikacji ze sklepu Windows Telefon Store, obu lub żadnego z nich (tylko klasyczny system Win32). Te makra są dostępne tylko w zestawie Windows SDK 8.1 lub nowszym, więc jeśli kod musi zostać skompilowany z wcześniejszymi wersjami zestawu Windows SDK lub dla innych platform oprócz systemu Windows, należy również rozważyć, czy żaden z nich nie jest zdefiniowany.

  11. Uruchom i debuguj aplikację na emulatorze lub urządzeniu fizycznym dla każdego typu urządzenia obsługiwanego przez aplikację. Aby uruchomić emulator, należy uruchomić program Visual Studio na komputerze fizycznym, a nie na maszynie wirtualnej.

Przenoszenie składnika środowiska uruchomieniowego systemu Windows 8.1 do platformy UWP

Jeśli masz bibliotekę DLL lub składnik środowisko wykonawcze systemu Windows, który działa już z aplikacjami ze Sklepu Windows 8.1, możesz użyć tej procedury, aby pobrać składnik lub bibliotekę DLL pracującą z platformą UWP w systemie Windows. Podstawową procedurą jest utworzenie nowego projektu i skopiowanie do niego kodu.

Aby przełączyć składnik środowiska uruchomieniowego systemu Windows 8.1 na platformę UWP

  1. W oknie dialogowym Nowy projekt w programie Visual Studio 2017 znajdź węzeł uniwersalny systemu Windows. Jeśli ten węzeł nie jest widoczny, najpierw zainstaluj zestaw Windows SDK . Wybierz szablon środowisko wykonawcze systemu Windows Składnik, nadaj nazwę składnikowi i wybierz przycisk OK. Nazwa składnika będzie używana jako nazwa przestrzeni nazw, więc możesz użyć tej samej nazwy co przestrzeń nazw starych projektów. Wymaga to utworzenia projektu w innym folderze niż stary. Jeśli wybierzesz inną nazwę, możesz zaktualizować nazwę przestrzeni nazw w wygenerowanych plikach kodu.

  2. Zamknij projekt.

  3. Skopiuj wszystkie pliki kodu (cpp, .h, xaml itp.) ze składnika systemu Windows 8.1 do nowo utworzonego projektu. Nie kopiuj pliku Package.appxmanifest.

  4. Skompiluj i rozwiąż wszelkie błędy spowodowane zmianami powodujących niezgodność między różnymi wersjami zestawu Windows SDK.

Rozwiązywanie problemów

Podczas procesu przenoszenia kodu do platformy UWP mogą wystąpić różne błędy. Poniżej przedstawiono niektóre z możliwych problemów, które mogą wystąpić.

Problemy z konfiguracją projektu

Może zostać wyświetlony błąd:

could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable

W takim przypadku projekt nie jest kompilatorem jako projekt uniwersalny systemu Windows. Sprawdź plik projektu i upewnij się, że ma on poprawne elementy XML identyfikujące projekt jako projekt uniwersalny systemu Windows. Powinny być obecne następujące elementy (numer wersji platformy docelowej może być inny):

<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<WindowsTargetPlatformVersion>10.0.10156.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.10156.0</WindowsTargetPlatformMinVersion>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>

Jeśli utworzono nowy projekt platformy UWP przy użyciu programu Visual Studio, ten błąd nie powinien być widoczny.

Zobacz też

Przewodnik przenoszenia języka Visual C++
Opracowywanie aplikacji na platformę uniwersalną systemu Windows (UWP)