Procedura: utilizzare codice C++ esistente in un'app della piattaforma UWP (Universal Windows Platform)How to: Use Existing C++ Code in a Universal Windows Platform App

Il modo più semplice per eseguire il programma desktop nell'ambiente UWP consiste probabilmente nell'usare le tecnologie Desktop Bridge,Perhaps the easiest way to get your desktop program running in the UWP environment is to use the Desktop Bridge technologies. tra cui Desktop App Converter, che consente di comprimere l'applicazione esistente come app UWP senza dover modificare il codice.These include the Desktop App Converter, which will package your existing application as a UWP app with no code changes required. Per altre informazioni, vedere Portare un'app desktop sulla piattaforma UWP (Universal Windows Platform) con Desktop Bridge.For more information, see Bring your desktop app to the Universal Windows Platform (UWP) with the Desktop Bridge.

Questo argomento illustra anche come convertire le librerie C++ (librerie statiche e DLL) nella piattaforma UWP (Universal Windows Platform).The rest of this topic discusses how to port C++ libraries (DLLs and static libraries) to the Universal Windows Platform (UWP). È possibile eseguire questa operazione in modo che la logica C++ di base possa essere applicata a più app UWP.You might want to do this so that your core C++ logic can be used with multiple UWP apps.

Le app UWP vengono eseguite in un ambiente protetto e, di conseguenza, molte chiamate API Win32, COM e CRT che potrebbero compromettere la sicurezza della piattaforma non sono consentite.UWP Apps run in a protected environment, and as a result, many Win32, COM, and CRT API calls that might compromise the security of the platform are not allowed. Il compilatore è in grado di rilevare tali chiamate e generare un errore se viene utilizzata l'opzione /ZW.The compiler can detect such calls and generate an error, if the /ZW option is used. È possibile utilizzare il Kit di certificazione app nell'applicazione per rilevare il codice che chiama le API non consentite.You can use the App Certification Kit on your application to detect code that calls forbidden APIs. Vedere Uso del Kit di certificazione app Windows.See Using the App Certification Kit.

Se il codice sorgente è disponibile per la libreria, è possibile eliminare le chiamate API non consentite.If source code is available for the library, you might be able to eliminate the forbidden API calls. Per informazioni dettagliate, incluso un elenco delle API consentite o vietate, vedere API Win32 e COM per app di Windows Runtime (sistema) e Funzioni CRT non supportate nelle app della piattaforma UWP (Universal Windows Platform).For details including a list of APIs that are allowed or forbidden, see Win32 and COM for Windows Runtime Apps and Universal Windows platform (UWP) Apps and CRT Functions Not Supported with /ZW. Sono disponibili alcune alternative in Alternative alle API Windows nelle app di Windows Store.Some alternatives can be found at Alternatives to Windows APIs in Windows Runtime apps and Universal Windows Platform (UWP) apps.

Se si tenta di aggiungere un riferimento da un progetto Universal Windows a una libreria desktop classica, viene visualizzato un messaggio di errore che indica che la libreria non è compatibile.If you just try to add a reference from a Universal Windows Project to a classic desktop library, you get an error message that says the library is not compatible. Nel caso di una libreria statica, è possibile collegare la libreria semplicemente aggiungendo la libreria (file .lib) all'input del linker, proprio come si farebbe con un'applicazione Win32.In the case of a static library, you can link to your library simply by adding the library (.lib file) to your linker input, just as you would in a classic Win32 application. Per le librerie in cui è disponibile solo un binario, questa è l'unica opzione.For libraries where only a binary is available, this is the only option. Una libreria statica è collegata al file eseguibile dell'app, ma una DLL Win32 utilizzata in un'app UWP deve essere inserita nel pacchetto dell'app includendola nel progetto e contrassegnandola come Contenuto.A static library is linked into your app's executable, but a Win32 DLL that you consume in a UWP app must be packaged into the app by including it in the project and marking it as Content. Per caricare una DLL Win32 in un'app UWP, è anche necessario chiamare la funzione LoadPackagedLibrary anziché LoadLibrary o LoadLibraryEx.To load a Win32 DLL in a Universal Windows Platform app, you also have to call LoadPackagedLibrary instead of LoadLibrary or LoadLibraryEx.

Se si dispone di codice sorgente della DLL o della libreria statica, è possibile ricompilare con /ZW come con un progetto UWP.If you have source code for the DLL or static library, you can recompile with /ZW as a UWP project. In tal caso, è possibile aggiungere un riferimento utilizzando Esplora soluzioni e utilizzarlo nelle app UWP C++.If you do that, you can add a reference using the Solution Explorer, and use it in C++ UWP apps. Nel caso di una DLL, ci si collega alla libreria di esportazione.In the case of a DLL, you link with the export library.

Per esporre la funzionalità ai chiamanti in altre lingue, è possibile convertire la libreria in un componente Windows Runtime.To expose functionality to callers in other languages, you can convert the library into a Windows Runtime Component. I componenti Windows Runtime differiscono dalle normali DLL perché includono metadati sotto forma di file con estensione winmd che descrivono il contenuto nel modo richiesto dai consumer di .NET e JavaScript.Windows Runtime Components differ from ordinary DLLs in that they include metadata in the form of .winmd files which describe the contents in a way that .NET and JavaScript consumers require. Per esporre elementi API in altri linguaggi, è possibile aggiungere costrutti C++/CX, come ad esempio classi di riferimento, e renderli pubblici, oppure usare la Libreria modelli C++ per Windows Runtime.To expose API elements to other languages, you can add C++/CX constructs, such as ref classes, and make them public, or use the Windows Runtime C++ Template Library (WRL). In Windows 10 e versioni successive, è possibile usare la libreria C++/WinRT anziché C++/CX.In Windows 10 and later, you can use the C++/WinRT library instead of C++/CX.

La discussione precedente non è valida in caso di componenti COM che devono essere gestiti in modo diverso.The preceding discussion doesn't apply to the case of COM components, which must be handled differently. Se un server COM è disponibile come file eseguibile o DLL, è possibile usarlo in un progetto Windows universale, purché sia compresso come componente COM senza registrazione, aggiungerlo al progetto come file di contenuto e crearne un'istanza tramite la funzione CoCreateInstanceFromApp.If you have a COM server in an EXE or DLL, you can use it in a Universal Windows Project as long as you package it as a registration-free COM component, add it to your project as a Content file, and instantiate it using CoCreateInstanceFromApp. Vedere Using Free-COM DLL in Windows Store C++ Project (Uso di DLL COM senza registrazione in progetti C++ di Windows Store).See Using Free-COM DLL in Windows Store C++ Project.

Se si vuole convertire una libreria COM esistente in piattaforma UWP (Universal Windows Platform), è necessario convertirla in un componente Windows Runtime usando la Libreria modelli C++ per Windows Runtime.If you have an existing COM library that you want to port to the Universal Windows Platform, you might be able to convert it into a Windows Runtime Component by using the Windows Runtime C++ Template Library (WRL). WRL non supporta tutte le funzionalità di ATL e OLE, pertanto la fattibilità di una porta dipende da quanto il codice COM dipende dalle funzionalità COM, ATL e OLE richieste dal componente.The WRL does not support all the features of ATL and OLE, so whether such a port is feasible depends on how much your COM code depends on what features of COM, ATL, and OLE your component requires.

Si tratta di vari metodi in cui è possibile utilizzare il codice C++ esistente in progetti di Universal Windows Platform.These are the various ways that you can use existing C++ code in Universal Windows Platform projects. Alcuni metodi non richiedono che il codice venga ricompilato con le estensioni del componente (C++/CX) abilitate (ovvero, l'opzione /ZW), mentre altri sì, pertanto se si desidera conservare il codice in C++ standard o preservare un ambiente di compilazione Win32 classico per una parte del codice, è possibile farlo, con opzioni di architettura appropriate.Some ways do not require code to be recompiled with the component extensions (C++/CX) enabled (that is, with the /ZW option), and some do, so if you need to keep code in standard C++, or preserve a classic Win32 compilation environment for some code, you can do so, with appropriate architecture choices. Ad esempio, tutto il codice contenente interfaccia utente e tipi di Universal Windows Platform che devono essere esposti a chiamanti C#, Visual Basic e JavaScript dovrebbe trovarsi nei progetti dell'app Windows e del componente Windows Runtime.For example, all your code that contains Universal Windows Platform UI and types that are to be exposed to C#, Visual Basic, and JavaScript callers should be in Windows App projects and Windows Runtime Component projects. Il codice che deve essere utilizzato solo nel codice C++ (tra cui C++/CX), può trovarsi in un progetto che compila con l'opzione /WX o in un progetto C++ standard.Code that needs to be consumed only in C++ (including C++/CX) code can either be in a project that compiles with the /WX option or a standard C++ project. È possibile utilizzare codice solo binario collegandolo sotto forma di libreria statica o all'interno di un pacchetto con app come contenuto e caricato in una DLL solo se non utilizza API proibite.Binary-only code can be used by linking it in as a static library, or packaged with the app as content and loaded in a DLL only if it doesn't use forbidden APIs.

Indipendentemente da quale di questi scenari di sviluppo viene scelto, è necessario considerare una serie di definizioni di macro che è possibile utilizzare nel codice per poter compilare il codice in modo condizionale, sia nella versione desktop classica Win32 che in Universal Windows Platform.Regardless of which of these development scenarios you choose, you should be aware of a number of macro definitions that you can use in your code so that you can compile code conditionally under both classic desktop Win32 and Universal Windows Platform.

#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)  

Queste istruzioni rispettivamente si applicano alle app di Windows Store, Windows Phone Store, a entrambe o a nessuna delle due (solo desktop Win32 classico).These statements respectively apply to Windows Store apps, Windows Phone Store apps, both, or neither (classic Win32 desktop only). Queste macro sono disponibili solo in Windows SDK 8.1 e versioni successive, pertanto se il codice deve essere compilato con le versioni precedenti di Windows SDK o per altre piattaforme diverse da Windows, è necessario prendere in considerazione il fatto che nessuna di queste venga definita.These macros are only available in Windows SDK 8.1 and later, so if your code needs to compile with earlier versions of the Windows SDK or for other platforms besides Windows, then you should also consider the case that none of them are defined.

Questo argomento contiene le seguenti procedure.This topic contains the following procedures.

  1. Uso di una DLL Win32 DLL in un'app UWPUsing a Win32 DLL in a Universal Windows Platform App

  2. Uso di una libreria statica C++ nativa in un'app UWPUsing a native C++ static library in a UWP App

  3. Conversione di una libreria C++ in un componente Windows RuntimePorting a C++ Library to a Windows Runtime Component

Uso di una DLL Win32 in un'app UWPUsing a Win32 DLL in a Universal Windows Platform App

Per una migliore protezione e affidabilità, le app Universal Windows vengono eseguite in un ambiente di runtime con restrizioni. Per questo motivo, non è possibile semplicemente utilizzare qualsiasi DLL nativa in un'applicazione desktop Windows classica.For better security and reliability, Universal Windows Apps run in a restricted runtime environment, so you can't just use any native DLL the way you would in a classic Windows desktop application. Se si dispone di codice sorgente per una DLL, è possibile trasferire il codice in modo da poterlo utilizzare in UWP.If you have source code for a DLL, you can port the code so that it runs on the UWP. È innanzitutto necessario modificare alcune impostazioni di progetto e i metadati del file di progetto per identificare il progetto come progetto UWP.You start by changing a few project settings and project file metadata to identify the project as a UWP project. È necessario compilare il codice della libreria utilizzando l'opzione /ZW, che abilita C++/CX.You need to compile the library code using the /ZW option, which enables C++/CX. Alcune chiamate API non sono consentite nelle app UWP a causa di più severi controlli associati a tale ambiente.Certain API calls are not allowed in UWP apps due to stricter controls associated with that environment. Vedere Win32 e COM per app di Windows Runtime e app UWP (Universal Windows Platform).See Win32 and COM for Windows Runtime apps and Universal Windows Platform (UWP) apps.

La procedura seguente si applica al caso in cui si dispone di una DLL nativa che espone le funzioni tramite dllexport.The following procedure applies to the case where you have a native DLL that exposes functions using __declspec(dllexport).

Alla porta di una DLL nativa per UWP senza creare un nuovo progettoTo port a native DLL to the UWP without creating a new project

  1. Se si dispone di una DLL nativa che consente di esportare funzioni tramite dllexport, è possibile chiamare tali funzioni da un'app UWP ricompilando DLL come progetto UWP.If you have a native DLL that exports functions by using __declspec(dllexport), you can call those functions from a UWP app by recompiling the DLL as a UWP project. Ad esempio, supponiamo di avere una DLL che esporta un paio di classi e i relativi metodi, con il codice nel file di intestazione seguente:For example, suppose we have a DLL that exports a couple of classes and their methods, with code like the following header file:

    // giraffe.h  
    #pragma once  
    
    #ifdef _DLL  
    #define GIRAFFE_API __declspec(dllexport)  
    #else  
    #define GIRAFFE_API   
    #endif  
    
    GIRAFFE_API int giraffeFunction();  
    
    class Giraffe  
    {  
        int id;  
            Giraffe(int id_in);  
        friend class GiraffeFactory;  
    
    public:  
        GIRAFFE_API int GetID();  
    };  
    
    class GiraffeFactory  
    {  
        static int nextID;  
    
    public:  
        GIRAFFE_API GiraffeFactory();  
        GIRAFFE_API static int GetNextID();  
        GIRAFFE_API static Giraffe* Create();  
    };  
    

    Aggiungere al file il codice seguente:And the following code file:

    // giraffe.cpp  
    #include "stdafx.h"  
    #include "giraffe.h"  
    
    Giraffe::Giraffe(int id_in) : id(id_in)  
    {  
    }  
    
    int Giraffe::GetID()  
    {  
      return id;  
    }  
    
    int GiraffeFactory::nextID = 0;  
    
    GiraffeFactory::GiraffeFactory()  
    {  
        nextID = 0;  
    }  
    
    int GiraffeFactory::GetNextID()  
    {  
        return nextID;  
    }  
    
    Giraffe* GiraffeFactory::Create()  
    {  
        return new Giraffe(nextID++);  
    }  
    
    int giraffeFunction();  
    

    Tutto il resto del progetto (stdafx. h, DllMain. cpp) fa parte del modello di progetto Win32 standard.Everything else in the project (stdafx.h, dllmain.cpp) is part of the standard Win32 project template. Se si desidera proseguire, ma non si desidera utilizzare una DLL ancora con questi passaggi, provare a creare un progetto Win32, selezionare la DLL nella procedura guidata progetto e quindi aggiungere un giraffe.cpp della file giraffe.h e il codice del file di intestazione e copiare il contenuto dal codice in questo passaggio nei file appropriati.If you want to follow along, but don't want to use your own DLL yet with these steps, try creating a Win32 project, select DLL in the project wizard, and then add a header file giraffe.h and code file giraffe.cpp, and copy the contents from the code in this step into the appropriate files.

    Il codice definisce la macro GIRAFFE_API che si risolve in dllexport quando viene definito DLL (ovvero, quando il progetto viene compilato come DLL).The code defines the macro GIRAFFE_API which resolves to __declspec(dllexport) when _DLL is defined (that is, when the project is built as a DLL).

  2. Aprire le proprietà del progetto per il progetto DLL e impostare la configurazione su Tutte le configurazioni.Open the Project Properties for the DLL project, and set the Configuration to All Configurations.

  3. Nelle proprietà del progetto della scheda C/C++Generale impostare Utilizza estensioni di Windows Runtime su Sì (/ZW).In the Project Properties, under C/C++, General tab, set Consume Windows Runtime Extension to Yes (/ZW). In questo modo si abilitano le estensioni del componente (C++/CX).This enables component extensions (C++/CX).

  4. In Esplora soluzioni selezionare il nodo del progetto, aprire il menu di scelta rapida e scegliere Scarica progetto.In Solution Explorer, select the project node, open the shortcut menu and choose Unload Project. Quindi, aprire il menu di scelta rapida sul nodo del progetto scaricato e scegliere di modificare il file di progetto.Then, open the shortcut menu on the unloaded project node, and choose to edit the project file. Individuare l'elemento WindowsTargetPlatformVersion e sostituirlo con gli elementi seguenti.Locate the WindowsTargetPlatformVersion element and replace it with the following elements.

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

    Chiudere il file con estensione vcxproj, aprire nuovamente il menu di scelta rapida e scegliere Ricarica progetto.Close the .vcxproj file, open the shortcut menu again and choose Reload Project.

    Esplora ora identifica il progetto come progetto di Windows universali.Solution Explorer now identifies the project as a Universal Windows project.

  5. Assicurarsi che il nome del file di intestazione precompilato sia corretto.Make sure your precompiled header file name is correct. Nella sezione Intestazioni precompilate, modificare il file di intestazione precompilato da pch.h a stdafx.h.In the Precompiled Headers section, change Precompiled Header File from pch.h to stdafx.h. In caso contrario, visualizzato il seguente errore.If you don't do this, you see the following error.

    error C2857: '#include' statement specified with the /Ycpch.h command-line option was not found in the source file  
    

    Il problema è che i progetti Windows universali utilizzano una convenzione di denominazione diversa per il file di intestazione precompilata.The issue is that the Universal Windows projects use a different naming convention for the precompiled header file.

  6. Compilare il progetto.Build the project. È possibile visualizzare alcuni errori relativi alle opzioni della riga di comando incompatibili.You might get some errors about incompatible command line options. Ad esempio, utilizzati di frequente opzione Abilita ricompilazione minima (o Gm) è impostata per impostazione predefinita in molti progetti C++ e non è compatibile con /ZW.For example, the frequently used option Enable Minimal Rebuild (/Gm) is set by default in many C++ projects, and is incompatible with /ZW.

    Alcune funzioni non sono disponibili quando si esegue la compilazione per la piattaforma Windows universale.Some functions are not available when you compile for the Universal Windows Platform. Verranno visualizzati errori del compilatore relativi a eventuali problemi.You will see compiler errors about any problems. I relativi fino a quando non si dispone di una compilazione pulita.Address these until you have a clean build.

  7. Per usare la DLL in un'app UWP nella stessa soluzione, aprire il menu di scelta rapida per il nodo del progetto UWP e scegliere Aggiungi, Riferimento.To use the DLL in a UWP app in the same solution, open the shortcut menu for the UWP project node, and choose Add, Reference.

    In Progetti, Soluzione selezionare la casella di controllo accanto al progetto DLL e scegliere il pulsante OK.Under Projects, Solution, select the checkbox next to the DLL project, and choose the OK button.

  8. Includere i file di intestazione della libreria nel file pch.h dell'app UWP.Include the library's header file(s) in your UWP app's pch.h file.

    #include "..\MyNativeDLL\giraffe.h"  
    
  9. Aggiungere il codice come di consueto nel progetto UWP per richiamare le funzioni e creare tipi dalla DLL.Add code as usual in the UWP project to invoke functions and create types from the DLL.

    MainPage::MainPage()  
    {  
        InitializeComponent();  
        GiraffeFactory gf;  
        Giraffe* g = gf.Create();  
        int id = g->GetID();  
    }  
    

Uso di una libreria statica C++ nativa in un'app UWPUsing a native C++ static library in a UWP App

È possibile utilizzare una libreria statica C++ nativa in un progetto UWP, ma esistono alcune restrizioni e limitazioni da tenere presenti.You can use a native C++ static library in a UWP project, but there are some restrictions and limitations to be aware of. Leggere prima questo argomento sulle librerie statiche in C++/CX.Start by reading this topic about static libraries in C++/CX. È possibile accedere al codice nativo nella libreria statica dall'app UWP, ma non è consigliabile creare tipi di riferimento pubblici nelle librerie statiche.You can access the native code in your static library from your UWP app, but it's not recommended to create public ref types in such a static library. Se si compila una libreria statica con l'opzione /ZW, Gestione librerie (in realtà il linker in formato non riconoscibile) invia un avviso:If you compile a static library with the /ZW option, the librarian (actually the linker in disguise) warns:

LNK4264: archiving object file compiled with /ZW into a static library; note that when authoring Windows Runtime types it is not recommended to link with a static library that contains Windows Runtime metadata  

Tuttavia, è possibile utilizzare una libreria statica in UWP senza ricompilarla con /ZW.However, you can use a static library in a UWP without recompiling it with /ZW. Non sarà possibile dichiarare i tipi di riferimento o utilizzare i costrutti C++/CX, ma se lo scopo è semplicemente quello di utilizzare la libreria di codice nativo, è possibile farlo attenendosi alla procedura seguente.You won't be able to declare any ref types or use C++/CX constructs, but if your purpose is to simply use library of native code, then you can do so by following these steps.

Per utilizzare una libreria statica C++ nativa in un progetto UWPTo use a native C++ static library in a UWP project

  1. Nelle proprietà del progetto per il progetto UWP, nella sezione Linker, aggiungere il percorso alla libreria nella proprietà Input.In the project properties for the UWP project, in the Linker section, add the path to the library in the Input property. Ad esempio, per una libreria del progetto che salva l'output in SolutionFolder\Debug\MyNativeLibrary\MyNativeLibrary.lib, aggiungere il relativo percorsoDebug\MyNativeLibrary\MyNativeLibrary.lib.For example, for a library in the project that places its output in SolutionFolder\Debug\MyNativeLibrary\MyNativeLibrary.lib, add the relative path Debug\MyNativeLibrary\MyNativeLibrary.lib.

  2. Aggiungere un'istruzione di inclusione per associare il file di intestazione a pch.h nel progetto UWP e iniziare ad aggiungere codice che utilizza la libreria.Add an include statement to reference the header file to your pch.h in the UWP project and start adding code that uses the library.

    #include "..\MyNativeLibrary\giraffe.h"  
    

    Non aggiungere un riferimento nel nodo Riferimenti in Esplora soluzioni.Do not add a reference in the References node in Solution Explorer. Tale meccanismo funziona solo per i componenti Windows Runtime.That mechanism only works for Windows Runtime Components.

Conversione di una libreria C++ in un componente Windows RuntimePorting a C++ Library to a Windows Runtime Component

Se si desidera utilizzare le API native in una libreria statica da un'app UWP e si dispone del codice sorgente per la libreria nativa, è possibile trasferire il codice in un componente Windows Runtime.If you want to consume native APIs in a static library from a UWP app, and you have the source code for the native library, you can port the code to a Windows Runtime Component. Non sarà più una libreria statica, ma una DLL.It won't be a static library anymore, it will be a DLL. È possibile utilizzarla in qualsiasi app UWP C++ ma, a differenza del libreria statica, è possibile aggiungere tipi di riferimento e altri costrutti C++/CX disponibili per i client in qualsiasi codice di app UWP, indipendentemente dal linguaggio.You can use it in any C++ UWP app, but unlike the case of static library, you can add ref types and other C++/CX constructs which are available to clients in any UWP app code, regardless of language. Pertanto, è possibile accedere a questi tipi da C#, Visual Basic o JavaScript.Therefore, you can access these types from C#, Visual Basic, or JavaScript. La procedura di base consiste nel creare un progetto di componente Windows Runtime, copiarvi il codice per la libreria statica e risolvere gli eventuali errori causati dallo spostamento di codice da una compilazione C++ standard a una compilazione /ZW.The basic procedure is to create a Windows Runtime Component project, copy the code for your static library into it, and address any errors that arise from moving the code from a standard C++ compilation to a /ZW compilation.

Per trasferire una libreria C++ in un componente Windows RuntimeTo port a C++ library to a Windows Runtime Component

  1. Creare un progetto del componente Windows RuntimeCreate a Windows Runtime Component project.

  2. Chiudere il progetto.Close the project.

  3. In Esplora File di Windows, individuare il progetto.In the Windows File Explorer, locate the project. Per impostazione predefinita, Visual Studio usa la cartella Visual Studio 2017\Projects nella cartella Documenti.By default, Visual Studio uses the Visual Studio 2017\Projects folder in your Documents folder. Individuare il progetto della libreria C++ che contiene il codice che si desidera trasferire.Locate the C++ library project that contains the code you want to port. Copiare i file di origine (file di intestazione, file di codice e altre risorse, incluse le sottodirectory) dal progetto della libreria C++ e incollarli nella cartella del progetto, assicurandosi di mantenere la stessa struttura di cartelle.Copy the source files (header files, code files, and any other resources, including in subdirectories) from your C++ library project, and paste them into the project folder, making sure to preserve the same folder structure.

  4. Riaprire il progetto del componente Windows Runtime e aprire il menu di scelta rapida per il nodo del progetto in Esplora soluzioni e scegliere Aggiungi, Elemento esistente.Reopen the Windows Runtime Component project, and open the shortcut menu for the project node in Solution Explorer, and choose Add, Existing Item.

  5. Selezionare tutti i file da aggiungere dal progetto originale e scegliere OK.Select all the files to add from your original project, and choose OK. Se necessario, ripetere la procedura per le sottocartelle.Repeat if necessary for subfolders.

  6. È possibile ora avere codice duplicato.You might now have some duplicated code. Se si dispone di più intestazioni precompilate (ad esempio, stdafx.h e pch.h), sceglierne una da mantenere.If you have more than one precompiled header (say stdafx.h and pch.h), choose one to keep. Copiare il codice necessario, ad esempio le istruzioni include, in quella che si sta mantenendo.Copy any required code, such as include statements, into the one you're keeping. Eliminare l'altra e in Intestazioni precompilate nelle proprietà del progetto assicurarsi che il nome del file di intestazione sia corretto.Then, delete the other, and in the project properties, under Precompiled Headers, make sure that the name of the header file is correct.

    Se è stato modificato il file da utilizzare come intestazione precompilata, assicurarsi che le opzioni di intestazione precompilata siano corrette per ogni file.If you changed the file to use as the precompiled header, make sure that the precompiled header options are correct for each file. Selezionare, a turno, ogni file con estensione cpp, aprire la finestra delle proprietà e assicurarsi che tutte siano impostate su Usa (/Yu), fatta eccezione per l'intestazione precompilata desiderata, che deve essere impostata su Crea (/Yc).Select each .cpp file in turn, open its properties window, and make sure that all are set to Use (/Yu), except for the desired precompiled header, which should be set to Create (/Yc).

  7. Compilare il progetto e risolvere eventuali errori.Build the project and resolve any errors. Questi errori potrebbero essere causati dall'utilizzo dell'opzione /ZW o potrebbero essere causati da una nuova versione di Windows SDK oppure potrebbero riflettere dipendenze come, ad esempio, file di intestazione da cui dipende la libreria o differenze nelle impostazioni del progetto tra il progetto precedente e quello nuovo.These errors could be caused by using the /ZW option, or they could be caused by a new version of the Windows SDK, or they might reflect dependencies such as header files that your library depends on, or differences in project settings between your old project and the new one.

  8. Aggiungere tipi di riferimento pubblici al progetto o convertire i tipi comuni in tipi di riferimento per esporre i punti di ingresso nella funzionalità che si desidera chiamare dalle app UWP.Add public ref types to your project, or convert ordinary types to ref types, to expose entry points into the functionality you want to call from UWP apps.

  9. Testare il componente aggiungendovi un riferimento da un progetto dell'app UWP e aggiungere codice per chiamare le API pubbliche create.Test the component by adding a reference to it from a UWP app project, and add some code to call the public APIs you created.

Vedere ancheSee Also

Porting to the Universal Windows Platform (Conversione in Universal Windows Platform)Porting to the Universal Windows Platform