Descrizione della decorazione dei nomi c ++

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

In questa pagina

Sommario

I compilatori Microsoft c ++ codificano i nomi dei simboli nei programmi c ++ consente di includere informazioni sul tipo nel nome. Si tratta di "decorazione dei nomi" o il nome alterazione." Lo scopo di questo è per garantire l'indipendenza dai tipi di collegamento. Il linguaggio c ++ consente di overload di funzioni in cui le funzioni con lo stesso nome vengono solo distinti uno da altro da tipi di dati degli argomenti alle funzioni. Decorazione dei nomi consente al linker di distinguere tra versioni diverse di funzioni in overload, perché i nomi delle funzioni sono codificati o decorati in modo diverso.

Informazioni

Fornitori del compilatore diverse disporre di propri metodi o di algoritmi per la decorazione dei nomi. Microsoft non pubblica l'algoritmo che relativo i di compilatori utilizzano per la decorazione dato che potrebbe cambiare in futuro. Tuttavia, talvolta è necessario ottenere la versione di un nome di funzione decorata. Ad esempio, sarà necessario esportare una funzione c ++ da una DLL di Windows per l'elenco sezione EXPORTS del file DEF utilizzato per generare la DLL. (Sebbene dichiarare che la funzione con __declspec (dllexport) è il metodo preferito per esportare una funzione di c ++ utilizzando Visual c ++, versione a 32 bit, è comunque possibile utilizzare un file def con questi prodotti.) Per esportare la funzione correttamente, è necessario elencare il nome decorato, non il nome nel codice sorgente.

Per tutti i prodotti elencati in precedenza, Microsoft rende disponibili gli strumenti del browser. Questi strumenti forniscono decorati di funzioni in grado di interpretare i nomi.

Per ulteriori informazioni su __declspec (dllexport), fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
132044Utilizzare _declspec (dllimport) e _declspec(dllexport) nel codice
Nell'esempio di codice riportato di seguito, la funzione di FormatDName viene utilizzata nella libreria di browser, parte del Toolkit di browser. Per scaricare il Toolkit di browser, il seguente sito Microsoft Web:
http://www.microsoft.com/downloads/details.aspx?FamilyID=621ae185-1c2a-4d6b-8146-183d66fe709d&displaylang=en
La funzione restituisce la forma non decorata del nome passato.

Codice di esempio

   /* Compile options needed: cl /AL getname.cpp bthunkl.obj /link bsc.lib
          (for 16-bit, where getname.cpp is the source file name)
                              cl getname.cpp /link bsc.lib
          (for 32-bit version 4.x and earlier, where getname.cpp is the source
           file name)
   */ 

   #include <iostream.h>
   #include <strstrea.h>

   extern "C"
   {
   #include "hungary.h"
   #include "bsc.h"
   #include "bscsup.h"
   }

   void main( int argc, char *argv[] )
   {
       if ( argc < 2 )
       {
           cout << "Usage: GETNAME decorated-name" << endl;
           return;
       }

       strstream name;

       // Call browser library function to get undecorated name
       name << FormatDname ( argv[1] ) << '\0';

       cout << "Undecorated name: " << name.str() << endl;
       name.rdbuf()->freeze( 0 );
   }
				
L'esempio riportato di seguito funziona con la versione più recente di Browser Toolkit 5.0 e Visual c ++ 5.0.
   /* Compile options needed: cl /GX getname.cpp /link msbsc50.lib
          (where getname.cpp is the source file name)
   */ 

   #include <iostream>
   #include <strstream>
   #include <windows.h>
   #include "bsc.h"

   using namespace std;

   int main( int argc, char *argv[] )
   {
       Bsc* pbsc;

       if ( argc < 3 )
       {
           cout << "Usage: GETNAME bscfile-name decorated-name" << endl;
           return 1;
       }

       strstream name;

       // Open the browser file
       Bsc::open( argv[1], &pbsc );

       // Call browser library function to get undecorated name
       name << pbsc->formatDname( argv[2] ) << '\0';

       cout << "Undecorated name: " << name.str() << endl;
       name.rdbuf()->freeze( 0 );

       pbsc->close();
       return 0;
   }
				

Proprietà

Identificativo articolo: 126845 - Ultima modifica: giovedì 1 settembre 2005 - Revisione: 4.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Chiavi: 
kbmt kbcode kbcompiler kbcpponly kbinfo KB126845 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: 126845
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