Condividi tramite


Conversione di progetti da modalità mista a linguaggio intermedio puro

Per impostazione predefinita, tutti i progetti CLR di Visual C++ sono collegati alle librerie di runtime C. Di conseguenza, questi progetti vengono classificati come applicazioni in modalità mista, perché combinano codice nativo con codice destinato a Common Language Runtime (codice gestito). Quando vengono compilati, vengono compilati in linguaggio intermedio (IL), noto anche come MSIL (Microsoft Intermediate Language).

Importante

Visual Studio 2015 deprecato e Visual Studio 2017 non supporta più la creazione di /clr:pure codice o /clr:safe per le applicazioni CLR. Se sono necessari assembly puri o sicuri, è consigliabile convertire l'applicazione in C#.

Se si usa una versione precedente del set di strumenti del compilatore Microsoft C++ che supporta /clr:pure o /clr:safe, è possibile usare questa procedura per convertire il codice in MSIL puro:

Per convertire l'applicazione in modalità mista in un linguaggio intermedio puro

  1. Rimuovere i collegamenti alle librerie di runtime C (CRT):

    1. Nel file di .cpp che definisce il punto di ingresso dell'applicazione modificare il punto di ingresso in Main(). Using Main() indica che il progetto non è collegato a CRT.

    2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Proprietà dal menu di scelta rapida per aprire le pagine delle proprietà per l'applicazione.

    3. Nella pagina Delle proprietà avanzate del progetto per linker selezionare il punto di ingresso e quindi immettere Main in questo campo.

    4. Per le applicazioni console, nella pagina delle proprietà Del progetto di sistema per Linker selezionare il campo SubSystem e modificarlo in Console (/SUBSYSTEM:CONSOLE).

      Nota

      Non è necessario impostare questa proprietà per le applicazioni Windows Form perché il campo SubSystem è impostato su Windows (/SUBSYSTEM:WINDOWS) per impostazione predefinita.

    5. In stdafx.himpostare come commento tutte le #include istruzioni. Ad esempio, nelle applicazioni console:

      // #include <iostream>
      // #include <tchar.h>
      

      oppure

      Ad esempio, nelle applicazioni Windows Form:

      // #include <stdlib.h>
      // #include <malloc.h>
      // #include <memory.h>
      // #include <tchar.h>
      
    6. Per Windows Form applicazioni, in Form1.cppimpostare come commento l'istruzione #include che fa windows.hriferimento a . Ad esempio:

      // #include <windows.h>
      
  2. Aggiungere il codice seguente a stdafx.h:

    #ifndef __FLTUSED__
    #define __FLTUSED__
       extern "C" __declspec(selectany) int _fltused=1;
    #endif
    
  3. Rimuovere tutti i tipi non gestiti:

    Se appropriato, sostituire i tipi non gestiti con riferimenti alle strutture dello spazio dei System nomi. I tipi gestiti comuni sono elencati nella tabella seguente:

    Struttura Descrizione
    Boolean Rappresenta un valore booleano.
    Byte Rappresenta un numero intero senza segno a 8 bit.
    Char Rappresenta un carattere Unicode.
    DateTime Rappresenta un istante di tempo, in genere espresso come data e ora del giorno.
    Decimal Rappresenta un numero decimale.
    Double Rappresenta un numero a virgola mobile a precisione doppia.
    Guid Rappresenta un identificatore univoco globale (GUID).
    Int16 Rappresenta un intero con segno a 16 bit.
    Int32 Rappresenta un intero con segno a 32 bit.
    Int64 Rappresenta un intero con segno a 64 bit.
    IntPtr Tipo specifico per la piattaforma usato per rappresentare un puntatore o un handle.
    SByte Rappresenta un intero con segno a 8 bit.
    Single Rappresenta un numero a virgola mobile a precisione singola.
    TimeSpan Rappresenta un intervallo di tempo.
    UInt16 Rappresenta un intero senza segno a 16 bit.
    UInt32 Rappresenta un intero senza segno a 32 bit.
    UInt64 Rappresenta un intero senza segno a 64 bit.
    UIntPtr Tipo specifico per la piattaforma usato per rappresentare un puntatore o un handle.
    Void Indica un metodo che non restituisce un valore; ovvero, il metodo ha il tipo restituito void .