Share via


Produktänderungen: Visual C++ .NET 2003

Aktualisiert: November 2007

Hinweis:

Möglicherweise sind einige der in diesem Thema erwähnten Features in der aktuellen Version von Visual C++ nicht verfügbar. Weitere Informationen finden Sie unter Änderungen in Visual C++ 2005 und früheren Editionen.

Microsoft Visual C++ .NET 2003 beinhaltet zahlreiche Verbesserungen und eine Reihe neuer Features:

  • Visual C++-Compiler, -Sprache und -Linker

  • Visual C++-Bibliotheken

  • Entwicklungsumgebung

  • Windows Forms-Designer für Managed Extensions for C++

  • Projektbuild-Automatisierungsmodell

Visual C++-Compiler, -Sprache und -Linker

Die folgenden Compiler-, Linker- sowie andere Buildtools und Visual C++-Sprachfeatures sind neu in Visual C++ .NET 2003.

Compiler

  • Informationen zum Ausführen einer Managed Extensions for C++-Anwendung, die mit dem Compiler der aktuellen Version erstellt wurde, in einer früheren Version der Laufzeit.

  • Eine exemplarische Vorgehensweise wurde hinzugefügt, die zeigt, wie Sie eine vorhandene systemeigene Anwendung für die Verwendung von Managed Extensions for C++ portieren (Exemplarische Vorgehensweise: Portieren einer vorhandenen systemeigenen C++-Anwendung zur Interoperation mit .NET Framework-Komponenten).

  • Jetzt können Sie einen Delegaten für eine Methode eines Werttyps erstellen.

  • Die Konformität des Compilers mit dem C++-Standard wurde in Visual C++ .NET 2003 wesentlich verbessert.

  • Die Compileroption /arch wurde hinzugefügt.

  • /Gf wurde als veraltet eingestuft und wird aus der nächsten Visual C++-Version entfernt.

  • Die Compileroption "/G7" wurde hinzugefügt.

  • Durch Verbesserungen der Compileroption /GS sind lokale Variablen jetzt besser vor Pufferüberläufen geschützt.

  • Die Compileroption /noBool wurde entfernt. Der Compiler lässt bool jetzt in einer Visual C++-Quellcodedatei nur als Schlüsselwort (und nicht als Bezeichner) zu.

  • Der Typ long long ist jetzt als typedef von __int64 verfügbar. long long wird in CRT derzeit noch nicht unterstützt.

  • Mithilfe der Compileroption /Zm können Sie jetzt die Begrenzung der Speicherzuordnung für vorkompilierte Header angegeben.

  • Die systeminterne _InterlockedCompareExchange-Funktion ist jetzt dokumentiert.

  • Die systeminterne _InterlockedDecrement-Funktion ist jetzt dokumentiert.

  • Die systeminterne _InterlockedExchange-Funktion ist jetzt dokumentiert.

  • Die systeminterne _InterlockedExchangeAdd-Funktion ist jetzt dokumentiert.

  • Die systeminterne _InterlockedIncrement-Funktion ist jetzt dokumentiert.

  • _ReadWriteBarrier (systemintern) wurde hinzugefügt.

Visual C++-Attribute

  • Das implements-Attribut ist jetzt dokumentiert.

Linker

Die folgenden Linkeroptionen wurden hinzugefügt:

  • /ASSEMBLYDEBUG

  • /ASSEMBLYLINKRESOURCE

  • /DELAYSIGN

  • /KEYFILE

  • /KEYCONTAINER

  • /SAFESEH

Präprozessor

  • Das _STATIC_CPPLIB-Symbol ist jetzt für die Verwendung mit der Option "/MD" dokumentiert.

  • Das _CPPLIB_VER-Symbol ist jetzt dokumentiert.

  • Für die #import-Direktive sind jetzt die folgenden Attribute dokumentiert:

    • auto_search

    • auto_rename

    • no_search_namespace

    • rename_search_namespace

    • tlbid

MASM

Die .SAFESEH-Direktive und die Option /safeseh ml.exe wurden hinzugefügt.

Visual C++-Bibliotheken

Alte iostream-Bibliothek

Die alte iostream-Bibliothek wurde in dieser Visual C++-Version entfernt. Verwenden Sie für die iostream-Programmierung die C++-Standardbibliothek.

C-Laufzeitbibliothek

  • Die Dokumentation für die C-Laufzeitbibliothek enthält jetzt Informationen für .NET Framework-Übereinstimmungen.

  • _get_heap_handle wurde hinzugefügt.

  • Das in _CrtSetDbgFlag verwendete _CRTDBG_CHECK_DEFAULT_DF-Makro ist jetzt als 0 (null) definiert. Standardmäßig findet also keine Heapüberprüfung statt.

  • swprintf ist jetzt mit dem ISO-Standard für C (nur C++) kompatibel.

  • vswprintf verfügt jetzt über ein reines C++-Format, mit dem Sie die maximale Anzahl der zu speichernden Zeichen angeben können.

  • Bei mehreren Mehrbytefunktionen, z. B. _mbsset, wurden ungültige Mehrbyte-Zeichenfolgen von CRT nicht immer erkannt, wenn ein abschließendes NULL-Byte auf ein führendes Byte folgte. CRT führt jetzt mehrere Überprüfungen auf ungültige Mehrbytezeichen durch, bei denen ein abschließendes NULL-Byte auf ein führendes Byte folgt.

  • _set_purecall_handler wurde hinzugefügt.

  • Wenn eine DLL, die statische Verweise auf die CRT-Bibliothek enthielt, früher von einem Prozess geladen wurde, wurde die Gleitkommagenauigkeit mit 53 Bits initialisiert. In Visual C++ .NET 2003 wird die Gleitkommagenauigkeit in diesem Szenario nicht initialisiert. Dies kann für einige vorhandene Anwendungen, die die Gleitkommagenauigkeit von CRT initialisieren ließen, einschneidende Änderungen beinhalten.

  • CRT stellt nun für alle mathematischen Funktionen die Formate float und double bereit. Diese neuen Funktionen können nur von Visual C++ aus aufgerufen werden.

C++-Standardbibliothek

In früheren Versionen wirkte sich die Eingabe und Ausgabe von Zeichen in einen Stream u. U. so aus, dass Zeichen- oder unsigned short-Werte gespeichert wurden, falls wchar_t nicht als systemeigener Typ definiert war. unsigned short wird jetzt immer als Zeichen behandelt.

Member der Headerdateien <hash_map> und <hash_set> befinden sich in Visual C++ .NET 2003 nicht mehr im std-Namespace, sondern wurden in den stdext-Namespace verschoben.

Die C++-Standardbibliothek wurde aktualisiert, um die verbesserte Visual C++-Compilerunterstützung für den C++-Standard effektiver zu nutzen. Die jetzt in Visual C++ enthaltene C++-Standardbibliothek verwendet beispielsweise Teilspezialisierungen von Vorlagen.

ATL

  • Der MIDL-Compiler verfügt in Visual Studio .NET 2003 über die Standardeinstellung /robust, die bewirkt, dass unter Windows NT 4 ausgeführte Projekte nicht mehr reagieren.

So ändern Sie das Flag des MIDL-Compilers in "/no_robust"

  1. Klicken Sie mit der rechten Maustaste auf das Projekt, und klicken Sie im Kontextmenü auf Eigenschaften.

    Das Dialogfeld Projekteigenschaften wird angezeigt.

  2. Klicken Sie im linken Bereich auf MIDL, und wählen Sie dann Befehlszeile aus.

  3. Geben Sie im Textfeld Zusätzliche Optionen die Zeichenfolge /no_robust ein.

  • Das USES_CONVERSION-Makro für die ATL-Zeichenfolgenkonvertierung wurde durch USES_CONVERSION_EX ersetzt. Dieses Makro versucht, Speicherplatz auf dem Stapel zu reservieren. Falls auf dem Stapel nicht genügend Platz verfügbar ist, wird versucht, Platz auf dem Heap zu reservieren. Falls auf dem Heap kein Platz zur Verfügung steht, wird NULL zurückgegeben. USES_CONVERSION_EX bietet einen zusätzlichen Parameter (Schwellenwert): Falls die Anforderung die Größe des Schwellenwerts übersteigt, versucht das Makro direkt, eine Reservierung auf dem Heap vorzunehmen.

  • _alloca wurde durch _atl_safe_alloca ersetzt.

  • Die CSocketAddr-Klasse wurde hinzugefügt, um protokollunabhängige Methoden für IPv6- und IPv4-Adressen bereitzustellen.

  • Beim Erstellen eines Projekts, das eine ausführbare Datei ausgibt, setzt ATL den Pfadnamen, der zur Laufzeit mit dem %MODULE%-Registratorskriptparameter erstellt wurde, automatisch in Anführungszeichen. Wenn der Pfadname nicht in Anführungszeichen gesetzt werden soll, verwenden Sie stattdessen den neuen %MODULE_RAW%-Parameter.

    Beim Erstellen eines Projekts, das eine DLL ausgibt, setzt ATL den Pfadnamen nicht in Anführungszeichen, wenn %MODULE% oder %MODULE_RAW% verwendet wird.

MFC

  • Verbindungstabellen werden beim Löschen eines Verbindungspunktes nicht mehr komprimiert. Der gelöschte Verbindungspunkt wird stattdessen durch NULL ersetzt. Deshalb sollten Sie auf NULL überprüfen, wenn Sie CConnectionPoint::GetConnections oder CConnectionPoint::GetNextConnection verwenden.

  • Durch die folgenden Funktionen können ab sofort Ausnahmen ausgelöst werden: CSimpleString::FreeExtra, CSimpleString::GetAt, CSimpleString::operator [], CSimpleString::ReleaseBuffer, CSimpleString::ReleaseBufferSetLength, CStrBuf::SetLength sowie durch einige CTime::CTime-Konstruktoren.

  • Die Verhalten von AfxIsValidAddress und AfxIsValidString hat sich geändert. In Nicht-Debugbuilds wird durch beide Funktionen nach Nicht-NULL-Argumenten gesucht.

  • CHeaderCtrl::GetOrderArray hat keinen zweiten Standardparameter mehr; -1 ist kein gültiger Wert mehr für den zweiten Parameter.

  • CAsyncSocket verfügt über neue Member mit IPv6-Unterstützung: GetPeerNameEx, GetSockNameEx, ReceiveFromEx und SendToEx.

ATL und MFC

  • Die CImage-Klasse überwacht jetzt die Anzahl der erstellten Objekte. Sobald die Zahl gegen 0 strebt, wird automatisch die GdiplusShutdown-Funktion aufgerufen, um die von GDI+ verwendeten Ressourcen freizugeben. Dadurch wird verhindert, dass Ressourcen belegt bleiben, nachdem CImage-Objekte von einer DLL erstellt wurden.

  • Die CString-Klasse von MFC wurde als Vorlagenklasse CStringT neu geschrieben. CString kann jetzt in ATL-Projekten verwendet werden, ohne eine Verknüpfung mit der umfangreicheren statischen MFC-Bibliothek oder DLL herzustellen.

    Hinweis:

    In dieser Version wurde das im Knowledge Base-Artikel "PRB: Linking Errors When You Import CString-Derived Classes" (Q309801, nur auf Englisch verfügbar) beschriebene Problem behoben. Knowledge Base-Artikel finden Sie auf der MSDN Library-CD-ROM oder unter https://support.microsoft.com/default.aspx. Falls in Visual C++ .NET 2002 Linkerfehler auftraten, wenn eine von CString abgeleitete Klasse aus einer MFC-Erweiterungs-DLL exportiert wurde, und Sie daraufhin die in diesem Artikel beschriebene Problemumgehung angewendet haben, sollten Sie den Problemumgehungscode entfernen, da das Problem in Visual C++ .NET 2003 behoben wurde.

  • CStrBufT und CSimpleStringT verfügen nun über einen zusätzlichen Vorlagenparameter, dem Sie entnehmen können, ob CString aus der MFC-DLL verwendet werden soll. Verwenden Sie (anstelle der globalen typedef) in atlsimplstr.h die typedef, die in den Klassen CStringT oder CSimpleStringT enthalten ist.

ATL-Server

  • In einem mit ATL Server erstellten XML-Webdienst besteht die Standardaktion darin, die SOAP-Parameter nach dem Einlesen zu überprüfen. Um die Validierung zu deaktivieren, definieren Sie das Makro _ATL_SOAP_NO_PARAMETER_VALIDATIONS.

  • SPROXY.EXE ist jetzt in der Lage, eine DISCOMAP- oder WSDL-Datei zu verarbeiten. Legen Sie die neue /wsdl-Option fest, wenn Sie eine WSDL-Datei als Eingabe verwenden:

    sproxy /wsdl <input_location>
    

    wobei <input_location> dem Pfad der zu verwendenden WSDL-Datei entspricht.

    SPROXY.EXE ist jetzt in der Lage, eine RESULTS.DISCOMAP-Datei zu verarbeiten:

    sproxy results.discomap
    

    Die DISCOMAP-Datei enthält eine Verknüpfung zu einer lokalen Kopie der WSDL-Datei und verwendet außerdem eine lokale Kopie der Schemadatei.

Entwicklungsumgebung

Hinweis:

Möglicherweise sind einige der in diesem Thema erwähnten Features in der aktuellen Version von Visual C++ nicht verfügbar. Weitere Informationen finden Sie unter Änderungen in Visual C++ 2005 und früheren Editionen.

Wenn Sie in Visual C++ .NET 2003 ein Visual C++-Projekt aus Visual Studio .NET öffnen, wird die alte Projektdatei umbenannt und eine neue Projektdatei für die Visual C++ .NET 2003-Umgebung erstellt.

Das Format einer VCPROJ-Datei ist jetzt dokumentiert.

Die Entwicklungsumgebung enthält die folgenden neuen Features:

  • Die Makros $(WebDeployPath), $(WebDeployRoot), $(ParentName), $(RootNameSpace), $(SafeParentName) und $(SafeInputName) wurden hinzugefügt.

  • Es ist jetzt möglich, ein Projekt zu erstellen, ohne die vom Projekt abhängigen Projekte zu erstellen.

Managed Extensions for C++-Projektvorlagen

Diese Version enthält mehrere neue Projektvorlagen, mit denen Sie Anwendungen in Managed Extensions for C++ erstellen können:

  • Windows-Steuerelementbibliothek (.NET)

  • Windows Forms-Anwendung (.NET)

  • Windows-Dienst (.NET)

Außerdem wurden die Vorlagen für verwaltete Projekte in Visual C++ .NET 2002 für diese Version umbenannt:

  • Verwaltete C++-Anwendung heißt jetzt Konsolenanwendung (.NET)

  • Verwaltete C++-Klassenbibliothek heißt jetzt Klassenbibliothek (.NET)

  • Verwaltete leeres C++-Projekt heißt jetzt Leeres Projekt (.NET)

  • Ein Verwalteter C++-Webdienst heißt jetzt ASP.NET-Webdienst

Windows Forms-Designer für Managed Extensions for C++

Durch die Integration des Windows Forms-Designers in diese Version bietet Visual C++ eine schnelle Anwendungsentwicklungslösung für die Erstellung von Windows Forms-Anwendungen in Managed Extensions for C++.

Dieses Feature bietet umfassende Unterstützung für Toolbox und Server-Explorer. Dadurch können Sie Steuerelemente und Komponenten durch Drag & Drop oder Ausschneiden und Einfügen direkt in Windows Forms-Anwendungen einfügen. Darüber hinaus können Sie die Eigenschaften der Steuerelemente und Komponenten über das Eigenschaftenraster problemlos bearbeiten.

Projektbuild-Automatisierungsmodell

Visual C++ .NET bietet neue Eigenschaftenseiten, eine Reihe neuer Objekte sowie neue Eigenschaften und Methoden für vorhandene Objekte, die zur Verbesserung des Projektbuildmodells beitragen.

Neue Eigenschaftenseiten

Eigenschaftenseite "Verwaltete Ressourcen"

Eigenschaftenseite "Tool zum Generieren von XML-Daten"

Eigenschaftenseite "Verwalteter Wrapper"

Eigenschaftenseite "Erweiterter verwalteter Wrapper"

Neue Objekte

VCALinkTool-Objekt

VCActiveXReference-Objekt

VCAssemblyReference-Objekt

VCAuxiliaryManagedWrapperGeneratorTool-Objekt

VCManagedResourceCompilerTool-Objekt

VCManagedWrapperGeneratorTool-Objekt

VCPrimaryInteropTool-Objekt

VCProjectReference-Objekt

VCReference-Objekt

VCReferences-Auflistung

VCReferenceConfiguration-Objekt

VCXMLDataGeneratorTool-Objekt

Neue oder geänderte Member für vorhandene Objekte

Den vorhandenen Objekten wurden mehrere neue oder aktualisierte Eigenschaften und Methoden hinzugefügt. Änderungen können sich auf mehrere Bereiche erstrecken, z. B. eine aktualisierte Signatur oder neu hinzugefügte Member umfassen.

Objekt

Neuer oder geänderter Member

VCCLCompilerTool-Objekt

EnableEnhancedInstructionSet-Eigenschaft

 

ToolKind-Eigenschaft

VCLinkerTool-Objekt

FixedBaseAddress-Eigenschaft

 

ToolKind-Eigenschaft

VCLibrarianTool-Objekt

ToolKind-Eigenschaft

VCCustomBuildTool-Objekt

ToolKind-Eigenschaft

VCMidlTool-Objekt

ToolKind-Eigenschaft

VCResourceCompilerTool-Objekt

ToolKind-Eigenschaft

VCPreBuildEventTool-Objekt

ToolKind-Eigenschaft

VCPreLinkEventTool-Objekt

ToolKind-Eigenschaft

VCPostBuildEventTool-Objekt

ToolKind-Eigenschaft

VCBscMakeTool-Objekt

ToolKind-Eigenschaft

VCNMakeTool-Objekt

ToolKind-Eigenschaft

VCWebServiceProxyGeneratorTool-Objekt

Namespace-Eigenschaft (VCProjectEngine)

 

References-Eigenschaft

 

ToolKind-Eigenschaft

VCWebDeploymentTool-Objekt

ToolKind-Eigenschaft

VCProject-Objekt

AddAssemblyReference-Methode

 

AddActiveXReference-Methode

 

AddProjectReference-Methode

 

CanAddAssemblyReference-Methode

 

CanAddActiveXReference-Methode

 

CanAddProjectReference-Methode

 

Object-Eigenschaft

 

References-Eigenschaft

 

ReferencesConsumableByDesigners-Eigenschaft

 

RemoveReference-Methode

 

RootNamespace-Eigenschaft

 

VCReferences-Eigenschaft

VCFile-Objekt

AddFile-Methode

 

CanAddFile-Methode

 

FileType-Eigenschaft

 

Items-Eigenschaft

 

Object-Eigenschaft

 

RemoveFile-Methode

VCFilter-Objekt

Object-Eigenschaft

VCConfiguration-Objekt

FullReferencesPath-Eigenschaft

 

ReferencesPath-Eigenschaft

 

ReferenceTools-Eigenschaft

 

SatelliteDLLs-Eigenschaft

 

StopBuild-Methode

 

StyleSheets-Eigenschaft

VCStyleSheet-Objekt

FullReferencesPath-Eigenschaft

 

ReferencesPath-Eigenschaft

 

ReferenceTools-Eigenschaft

 

StyleSheetDirectory-Eigenschaft

 

StyleSheetName-Eigenschaft

VCFileConfiguration-Objekt

ProjectConfiguration-Eigenschaft

 

Compile-Methode

 

OutputUpToDate-Eigenschaft

VCProjectEngine-Objekt

ShowEnvironmentInBuildLog-Eigenschaft

Siehe auch

Weitere Ressourcen

Produktänderungen in Visual C++-Versionen