Come utilizzare l'opzione del compilatore /d1PrivateNativeTypes per rendere nativo classi private in Visual c ++ .NET 2003 o in Visual c ++ 2005

Traduzione articoli Traduzione articoli
Identificativo articolo: 822330 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo vengono descritti una modifica di progettazione in Visual c ++ .NET 2003 e in Visual c ++ 2005 da una versione precedente del prodotto, Visual c ++ .NET 2002. In questo articolo viene inoltre descritto il / d1PrivaNativeTypes opzione del compilatore.

A differenza di Visual c ++ .NET 2002 (cui classi native sono private), per impostazione predefinita in Visual c ++ .NET 2003 e in Visual Studio 2005, classi native sono pubbliche. È possibile utilizzare le classi native in altri assembly. È possibile utilizzare il / d1PrivateNativeTypes opzione del compilatore in Visual c ++ .NET 2003 o in Visual c ++ 2005 per ottenere un comportamento simile come il comportamento in Visual c ++ .NET 2002.

Informazioni

In questa sezione vengono illustrate la modifica di progettazione di Visual c ++ .NET 2003 o Visual c ++ 2005.

Quando si crea una classe (nativa) non gestita, il compilatore Visual c ++ .NET 2003 o Visual c ++ 2005 imposta sempre la visibilità di classe pubblico durante la generazione dell'assembly. Se non si specifica la parola chiave __gc o la parola chiave __nogc prima della dichiarazione di classe, la classe utilizza __nogc . La parola chiave __nogc per una classe indica che la classe è una classe c ++ non gestita.

Esempio 1

Il codice di esempio seguente illustra le differenze tra Visual c ++ .NET 2002 e Visual c ++ .NET 2003 o Visual c ++ 2005 di assembly.
  1. Aprire il prompt di Visual Studio .NET 2003 o Visual Studio 2005: fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio .NET 2003 o Microsoft Visual Studio 2005 , scegliere Strumenti di Visual Studio .NET o Visual Studio Tools , quindi prompt dei comandi di Visual Studio .NET 2003 o il prompt dei comandi di Visual Studio 2005 .
  2. Aprire un editor di testo, ad esempio il blocco note e quindi incollare il seguente codice in un vuoto file:
    #using <mscorlib.dll>
    class X{}; //native class.
    __gc public class A {
    public:
    	A(){};
    	A(X*){};
    };
    void main()
    {
      X x;
    }
    Nota In Visual Studio 2005, utilizzare / clr:oldsyntas .
  3. Salvare il file come managedcode.cpp
  4. Dal prompt dei comandi di Visual Studio .NET 2003 o Visual Studio 2005 eseguire il comando seguente per creare un file eseguibile:
    cl /clr managedcode.cpp
  5. Eseguire il comando seguente per eseguire il disassembler di Microsoft intermediate language (MSIL) per visualizzare l'assembly managedcode.exe:
    ildasm managedcode.exe
  6. Verificare la dichiarazione di classe X . È possibile notare la dichiarazione di classe X è pubblica e che viene visualizzato come segue:
    .class value public sequential ansi sealed
           extends [mscorlib]System.ValueType
Il compilatore di Microsoft Visual c ++ .NET 2002 imposta classi non gestite su private. Quando si compila il codice stesso in Visual Studio .NET 2002 e si apre l'assembly utilizzando Disassembler MSIL, è possibile notare che la dichiarazione di classe X è privata.
.class value private sequential ansi sealed
       extends [mscorlib]System.ValueType
per ottenere un comportamento simile come il comportamento in Visual c ++ .NET 2002, è possibile utilizzare il / d1PrivateNativeTypes opzione del compilatore. Compilare il file di managedcode.cpp di esempio dal prompt dei comandi di Visual Studio .NET 2003 utilizzando il comando seguente:
cl /clr managedcode.cpp /d1PrivateNativeTypes
notifica che la stessa dichiarazione di classe X esista nel sia in Visual c ++ .NET 2003 e Visual c ++ .NET 2002. Per visualizzare l'assembly, utilizzare Disassembler MSIL:
ildasm managedcode.exe

Esempio 2

Nell'esempio riportato di seguito viene descritto come è possibile limitare l'accessibilità di una classe nativa in Visual c ++ .NET 2003 o in Visual c ++ 2005.
  1. Aprire il prompt dei comandi Visual Studio .NET 2003 o Visual Studio 2005.
  2. Aprire un editor di testo, ad esempio il blocco note e quindi incollare il codice riportato di seguito in un file vuoto:
    class X{}; //native class.
  3. Salvare il file come Native.h
  4. Creare un file di Managed1.cpp utilizzando il blocco note e quindi incollare il seguente codice:
    #using <mscorlib.dll>
    
    #include "native.h"
    __gc public class A {
    public:
    	A(){};
    	A(X*){};
    };
  5. Per generare il progetto come file di libreria (DLL) di collegamento dinamico: eseguire il seguente comando dal prompt dei comandi di Visual Studio .NET 2003:
    cl /clr /NOENTRY /LD managed1.cpp
  6. Vedere la classe nativa da un assembly. Creare un nuovo file Managed2.cpp utilizzando il blocco note e quindi incollarvi il codice riportato di seguito:
    // managed2.cpp
    
    #using <mscorlib.dll>
    
    #include "native.h"
    #using "managed1.dll"
    
    int main()
    {
        X x;
    
        A *pA = new A(&x);
    }
  7. Eseguire il comando seguente per creare un file eseguibile:
    cl /clr managed2.cpp
    è possibile creare correttamente in Visual c ++ .NET 2003 o in Visual c ++ 2005.
  8. Ripetere i passaggi da 2 a 7 da Visual Studio .NET 2003 prompt.

    Viene visualizzato i seguenti errori del compilatore:
    errore C3376: 'X': tipo inaccessibile
    Errore C3377: 'A::.ctor': Impossibile importare il metodo - un tipo di parametro o il tipo restituito risulterà inaccessibile
    errore C2660: 'A::A': funzione non accetta parametri 1
Quando si utilizza il compilatore Visual c ++ .NET 2002, viene generato un errore poiché il costruttore di classe A viene utilizzato un tipo privato di classe X . Di conseguenza, il compilatore è Impossibile importare correttamente la definizione di A .

In Visual c ++ .NET 2003 o in Visual Studio 2005, classi native vengono considerate come pubblica.

Mentre si utilizza la nuova opzione del compilatore / d1PrivateNativeTypes , può limitare l'accesso della classe nativo ad altri assembly. In Visual c ++ .NET 2003 o in Visual c ++ 2005, è consigliabile che si compila utilizzando il / d1PrivateNativeTypes opzione.

Riferimenti

Per ulteriori informazioni sull'utilità Ildasm.exe per visualizzare gli assembly, visitare il seguente sito Web MSDN:
Esercitazione su Ildasm.exe http://msdn2.microsoft.com/en-us/library/aa309387(VS.71).aspx

Proprietà

Identificativo articolo: 822330 - Ultima modifica: venerdì 11 maggio 2007 - Revisione: 3.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Chiavi: 
kbmt kbprogramming kbcompiler kbinfo KB822330 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 822330
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com