Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Nota: |
|---|
È possibile che alcune funzionalità citate in questo argomento non siano più presenti nella versione attuale di Visual C++. Per ulteriori informazioni, vedere Modifiche apportate in Visual C++ 2005 e versioni precedenti. |
In Microsoft Visual C++ .NET 2003 sono disponibili nuove funzionalità e sono stati apportati diversi miglioramenti.
Compilatore Visual C++, Linguaggio e Linker
Librerie di Visual C++
Ambiente di sviluppo
Progettazione in Windows Form per estensioni gestite per C++
Modello di automazione della generazione del progetto
Compilatore Visual C++, Linguaggio e Linker
Le funzionalità di compilatore, linker, altri strumenti di generazione e linguaggio Visual C++ sono nuove per Visual C++ .NET 2003.
Compilatore
Vengono fornite informazioni su come eseguire un'applicazione creata con le estensioni gestite per C++ generata con il compilatore della versione attuale su una versione precedente del runtime.
È stata aggiunta una procedura dettagliata per illustrare come eseguire il porting di un'applicazione nativa esistente per utilizzare le estensioni gestite per C++. Procedura dettagliata: porting di un'applicazione C++ nativa esistente per l'interoperabilità con i componenti .NET Framework.
È ora possibile creare un delegato su un metodo di un tipo di valore.
La conformità del compilatore allo standard C++ è stata notevolmente migliorata per Visual C++ .NET 2003.
È stata aggiunta l'opzione del compilatore /arch.
L'opzione /Gf è obsoleta e sarà rimossa dalla versione successiva di Visual C++.
È stata aggiunta l'opzione del compilatore /G7.
L'opzione del compilatore /GS è stata migliorata per semplificare la protezione delle variabili locali da sovraccarichi diretti del buffer.
L'opzione del compilatore noBool è stata rimossa. Attualmente, bool può comparire solo come parola chiave, non come identificatore, in un file di codice sorgente Visual C++.
Il tipo long long è ora disponibile come typedef di __int64. Non è ancora disponibile alcun supporto per il tipo long long in CRT.
L'opzione del compilatore /Zm specifica ora il limite di allocazione della memoria dell'intestazione precompilata.
_InterlockedCompareExchange intrinseco è ora documentato.
_InterlockedDecrement intrinseco è ora documentato.
_InterlockedExchange intrinseco è ora documentato.
_InterlockedExchangeAdd intrinseco è ora documentato.
_InterlockedIncrement intrinseco è ora documentato.
È stato aggiunto _ReadWriteBarrier intrinseco.
Attributi di Visual C++
- L'attributo implements è ora documentato.
Linker
Sono state aggiunte le seguenti opzioni del linker:
/ASSEMBLYDEBUG
/ASSEMBLYLINKRESOURCE
/DELAYSIGN
/KEYFILE
/KEYCONTAINER
/SAFESEH
Preprocessore
Il simbolo _STATIC_CPPLIB è ora documentato per l'utilizzo con /MD.
Il simbolo _CPPLIB_VER è ora documentato.
La direttiva #import dispone ora degli attributi documentati riportati di seguito:
auto_search
auto_rename
no_search_namespace
rename_search_namespace
tlbid
MASM
Sono state aggiunte la direttiva .SAFESEH e l'opzione /safeseh ml.exe.
Librerie di Visual C++
Libreria iostream precedente
In questa versione la libreria iostream precedente è stata rimossa da Visual C++. Utilizzare la libreria standard di C++ per la programmazione iostream.
Libreria di runtime C
Nella documentazione per la libreria di runtime del linguaggio C sono ora incluse le informazioni per gli equivalenti .NET Framework.
È stato aggiunto _get_heap_handle.
La macro _CRTDBG_CHECK_DEFAULT_DF, utilizzata in _CrtSetDbgFlag, viene ora definita su zero per indicare che per impostazione predefinita non viene eseguito alcun controllo dell'heap.
swprintf è ora compatibile con lo standard ISO C (solo C++).
Per vswprintf è ora disponibile un form specifico di C++ che consente di specificare il numero massimo di caratteri da archiviare.
Per molte funzioni multibyte, ad esempio _mbsset, in CRT non venivano sempre rilevate le stringhe multibyte non valide, dove un byte di apertura era seguito da un byte di chiusura null. In CRT sono ora disponibili più controlli per i caratteri multibyte non validi, dove un byte di apertura è seguito da un byte di chiusura null.
È stato aggiunto _set_purecall_handler.
In precedenza, quando un processo caricava una DLL con riferimento statico alla libreria CRT, la precisione dei valori a virgola mobile veniva inizializzata su 53 bit. In Visual C++ .NET 2003, tale precisione non viene inizializzata in questo scenario. Questa situazione può essere causa di una nuova modifica in alcune applicazioni esistenti che si basavano su CRT per l'inizializzazione della precisione dei valori a virgola mobile.
CRT dispone ora di form di tipo float e double per tutte le funzioni matematiche. È possibile chiamare le nuove funzioni solo da Visual C++.
Libreria standard di C++
Nelle versioni precedenti, l'input e l'output dei caratteri in un flusso poteva essere causa della memorizzazione di valori character o unsigned short se wchar_t non era stato come tipo nativo. Ora, un valore unsigned short viene sempre considerato come carattere.
In Visual C++ .NET 2003, i membri dei file di intestazione <hash_map> e <hash_set> non sono più presenti nello spazio dei nomi std, ma sono stati spostati nello spazio dei nomi stdext.
La libreria standard di C++ Library è stata aggiornata per sfruttare il supporto avanzato del compilatore Visual C++ per C++ standard. L'implementazione della libreria standard di C++ fornita in Visual C++, ad esempio, utilizza ora la specializzazione parziale dei modelli.
ATL
- Il compilatore MIDL di Visual Studio .NET 2003 include l'impostazione predefinita /robust che comporta l'arresto dei progetti in esecuzione in Windows NT 4.
Per impostare il flag del compilatore MIDL su /no_robust
Fare clic con il pulsante destro del mouse sul progetto e quindi scegliere Proprietà dal menu di scelta rapida.
Verrà visualizzata la finestra di dialogo Proprietà progetto.
Nel riquadro sinistro fare clic su MIDL e quindi selezionare Riga di comando.
Immettere /no_robust nella casella di testo Opzioni aggiuntive.
La macro di conversione delle stringhe ATL USES_CONVERSION è stata sostituita da USES_CONVERSION_EX, che tenterà di allocare spazio sullo stack. Se non è disponibile spazio sullo stack, tenterà con l'heap. Se non è disponibile spazio sull'heap, restituirà NULL. USES_CONVERSION_EX dispone di un parametro extra (threshold) che può essere utilizzato: se la richiesta è maggiore della dimensione di threshold, la macro andrà direttamente all'heap.
_alloca è stato sostituito da _atl_safe_alloca.
La classe CSocketAddr è stata aggiunta per fornire metodi indipendenti dai protocolli per gestire indirizzi IPv6 e IPv4.
Quando si genera un progetto che produce un eseguibile, in ATL il nome del percorso creato in fase di esecuzione con il parametro dello script di registrazione %MODULE% viene automaticamente racchiuso tra virgolette. Se non si desidera racchiudere tra virgolette il nome del percorso, utilizzare il nuovo parametro %MODULE_RAW%.
Quando si genera un progetto che produce una DLL, le virgolette non verranno aggiunte al nome del percorso se viene utilizzato %MODULE% o %MODULE_RAW%.
MFC
Le mappe della connessione non vengono più compresse quando si elimina un punto di connessione, ma il punto di connessione eliminato viene sostituito da un valore NULL. Verificare, pertanto, la presenza di valori NULL quando si utilizza CConnectionPoint::GetConnections o CConnectionPoint::GetNextConnection.
Le funzioni riportate di seguito potrebbero ora generare eccezioni: CSimpleString::FreeExtra, CSimpleString::GetAt, CSimpleString::operator [], CSimpleString::ReleaseBuffer, CSimpleString::ReleaseBufferSetLength, CStrBuf::SetLength e alcuni costruttori CTime::CTime.
I comportamenti di AfxIsValidAddress e AfxIsValidString sono cambiati. Nella build non di debug, entrambe le funzioni eseguono solo il test per un argomento non NULL.
CHeaderCtrl::GetOrderArray non dispone più di un secondo parametro predefinito; -1 non è più un valore valido per il secondo parametro.
CAsyncSocket dispone di nuovi membri con supporto IPv6: GetPeerNameEx, GetSockNameEx, ReceiveFromEx e SendToEx.
ATL e MFC
La classe CImage tiene ora traccia del numero di oggetti creati. Quando il conteggio è pari a 0, la funzione GdiplusShutdown viene automaticamente chiamata per rilasciare le risorse utilizzate da GDI+. Questa operazione impedisce che le risorse non vengano liberate quando gli oggetti CImage vengono creati da una DLL.
La classe CString MFC è stata riscritta come classe template, CStringT. Questa caratteristica consente di utilizzare CString in progetti ATL senza eseguire il collegamento alla DLL o alla libreria statica MFC di dimensioni superiori.
Nota:In questa versione viene risolto il problema descritto nell'articolo della Knowledge Base Q309801 "PRB: Linking Errors When You Import CString-Derived Classes" disponibile nel CD della MSDN Library o all'indirizzo https://support.microsoft.com/?ln=IT. Se si riscontrano errori del linker durante l'esportazione di una classe derivata da CString da una DLL di estensione MFC in Visual C++ .NET 2002 ed è stata applicata la soluzione descritta in questo articolo, è necessario rimuovere il codice di soluzione poiché il problema è stato risolto in Visual C++ .NET 2003.
CStrBufT e CSimpleStringT dispongono ora di un parametro di template aggiuntivo che indica se CString deve essere utilizzato dalla DLL MFC. Utilizzare il typedef presente nella classe CStringT o CSimpleStringT in atlsimplstr.h (anziché il typedef globale).
ATL Server
In un servizio Web XML creato con ATL Server l'azione predefinita consiste nella convalida dei parametri SOAP dopo che sono stati letti. Per disattivare la convalida, definire la macro _ATL_SOAP_NO_PARAMETER_VALIDATIONS.
SPROXY.EXE consente ora di elaborare un file discomap o wsdl. Specificare la nuova opzione /wsdl quando si utilizza un file WSDL come input:
sproxy /wsdl <input_location>dove <input_location> è il percorso del file WSDL da utilizzare.
SPROXY.EXE può ora elaborare un file results.discomap:
sproxy results.discomapNotare che il file DISCOMAP contiene un collegamento a una copia locale del file WSDL e utilizza anche una copia locale del file di schema.
Ambiente di sviluppo
Nota: |
|---|
È possibile che alcune funzionalità citate in questo argomento non siano più presenti nella versione attuale di Visual C++. Per ulteriori informazioni, vedere Modifiche apportate in Visual C++ 2005 e versioni precedenti. |
Quando si apre un progetto Visual C++ da Visual Studio .NET in Visual C++ .NET 2003, il file del progetto precedente verrà rinominato e verrà creato un file del nuovo progetto per l'ambiente Visual C++ .NET 2003.
Ora viene documentato il formato del file VCPROJ.
Le nuove funzioni elencate di seguito sono contenute nell'ambiente di sviluppo:
sono state aggiunte le macro $(WebDeployPath), $(WebDeployRoot), $(ParentName), $(RootNameSpace), $(SafeParentName), e $(SafeInputName).
È ora possibile generare un progetto senza generare alcuno dei progetti dipendenti dai progetti.
Modelli dei progetti di estensioni gestite per C++
In questa versione sono inclusi numerosi nuovi modelli di progetto che è possibile utilizzare per creare applicazioni con estensioni gestite per C++:
Libreria di controlli Windows (.NET)
Applicazione Windows Forms (.NET)
Servizio Windows (.NET)
Inoltre, i modelli per i progetti gestiti in Visual C++ .NET 2002 sono stati rinominati per questa versione:
L'applicazione gestita C++ è ora chiamata applicazione console (.NET)
La libreria di classi C++ gestita è ora chiamata libreria di classi (.NET)
Il progetto vuoto C++ gestito è ora chiamato progetto vuoto (.NET)
Il servizio Web C++ gestito è ora chiamato Servizio Web ASP.NET
Progettazione in Windows Form per estensioni gestite per C++
Con l'aggiunta di Progettazione Windows Form in questa versione, viene introdotta in Visual C++ una soluzione rapida per lo sviluppo di applicazioni Windows Form con estensioni gestite per C++.
Questa funzionalità include il supporto completo della casella degli strumenti e di Esplora server, che consente di trascinare o tagliare e incollare, controlli e componenti direttamente nell'applicazione Windows Form. È inoltre possibile modificare le proprietà di controlli e componenti attraverso la griglia delle proprietà.
Modello di automazione della generazione del progetto
In Visual C++ .NET sono disponibili nuove pagine delle proprietà e alcuni nuovi oggetti, nonché nuove proprietà e metodi per gli oggetti esistenti che potenziano il modello di generazione del progetto.
Nuove pagine delle proprietà
Pagina delle proprietà delle risorse gestite
Pagina delle proprietà dello strumento generatore di dati XML
Pagina delle proprietà dei wrapper gestiti
Pagina delle proprietà dei wrapper gestiti ausiliari
Nuovi oggetti
Oggetto VCALinkTool
Oggetto VCActiveXReference
Oggetto VCAssemblyReference
Oggetto VCAuxiliaryManagedWrapperGeneratorTool
Oggetto VCManagedResourceCompilerTool
Oggetto VCManagedWrapperGeneratorTool
Oggetto VCPrimaryInteropTool
Oggetto VCProjectReference
Oggetto VCReference
Insieme VCReferences
Oggetto VCReferenceConfiguration
Oggetto VCXMLDataGeneratorTool
Membri nuovi o modificati per gli oggetti esistenti
Sono stati aggiunti agli oggetti esistenti vari metodi e proprietà nuovi o aggiornati. Le modifiche possono riguardare vari elementi, come ad esempio una firma aggiornata o l'aggiunta di nuovi membri.
Object |
Membro nuovo o modificato |
|---|---|
Oggetto VCCLCompilerTool |
Proprietà EnableEnhancedInstructionSet |
|
Proprietà ToolKind |
Oggetto VCLinkerTool |
Proprietà FixedBaseAddress |
|
Proprietà ToolKind |
Oggetto VCLibrarianTool |
Proprietà ToolKind |
Oggetto VCCustomBuildTool |
Proprietà ToolKind |
Oggetto VCMidlTool |
Proprietà ToolKind |
Oggetto VCResourceCompilerTool |
Proprietà ToolKind |
Oggetto VCPreBuildEventTool |
Proprietà ToolKind |
Oggetto VCPreLinkEventTool |
Proprietà ToolKind |
Oggetto VCPostBuildEventTool |
Proprietà ToolKind |
Oggetto VCBscMakeTool |
Proprietà ToolKind |
Oggetto VCNMakeTool |
Proprietà ToolKind |
Oggetto VCWebServiceProxyGeneratorTool |
Proprietà Namespace (VCProjectEngine) |
|
Proprietà References |
|
Proprietà ToolKind |
Oggetto VCWebDeploymentTool |
Proprietà ToolKind |
Oggetto VCProject |
Metodo AddAssemblyReference |
|
Metodo AddActiveXReference |
|
Metodo AddProjectReference |
|
Metodo CanAddAssemblyReference |
|
Metodo CanAddActiveXReference |
|
Metodo CanAddProjectReference |
|
Proprietà Object |
|
Proprietà References |
|
Proprietà ReferencesConsumableByDesigners |
|
Metodo RemoveReference |
|
Proprietà RootNamespace |
|
Proprietà VCReferences |
Oggetto VCFile |
Metodo AddFile |
|
Metodo CanAddFile |
|
Proprietà FileType |
|
Proprietà Items |
|
Proprietà Object |
|
Metodo RemoveFile |
Oggetto VCFilter |
Proprietà Object |
Oggetto VCConfiguration |
Proprietà FullReferencesPath |
|
Proprietà ReferencesPath |
|
Proprietà ReferenceTools |
|
Proprietà SatelliteDLLs |
|
Metodo StopBuild |
|
Proprietà StyleSheets |
Oggetto VCStyleSheet |
Proprietà FullReferencesPath |
|
Proprietà ReferencesPath |
|
Proprietà ReferenceTools |
|
Proprietà StyleSheetDirectory |
|
Proprietà StyleSheetName |
Oggetto VCFileConfiguration |
Proprietà ProjectConfiguration |
|
Metodo Compile |
|
Proprietà OutputUpToDate |
Oggetto VCProjectEngine |
Proprietà ShowEnvironmentInBuildLog |