製品の変更点 : Visual C++ .NET 2003
更新 : 2007 年 11 月
メモ : |
---|
ここで説明している機能のいくつかは、現在のバージョンの Visual C++ には存在しない可能性があります。詳細については、「Visual C++ 2005 とそれ以前のエディションの変更点」を参照してください。 |
Microsoft Visual C++ .NET 2003 には、多くの強化された機能といくつかの新機能が用意されています。
Visual C++ コンパイラ、C++ 言語、およびリンカ
Visual C++ のライブラリ
開発環境
C++ マネージ拡張の Windows フォーム デザイナ
プロジェクト ビルド オートメーション モデル
Visual C++ コンパイラ、C++ 言語、およびリンカ
次のコンパイラ、リンカ、その他のビルド ツール、および Visual C++ 言語の機能は、Visual C++ .NET 2003 の新機能です。
コンパイラ
実行時の前のバージョンのランタイムで現在のバージョンのコンパイラを使用してビルドした Managed Extensions for C++ アプリケーションを実行する方法に関する情報です。
C++ マネージ拡張を使用するように既存のネイティブ アプリケーションを移植する方法を示すために追加されたチュートリアル「チュートリアル : .NET Framework コンポーネントと相互運用するように既存のネイティブ C++ アプリケーションを移植する」を参照してください。
値型のメソッドにデリゲートを作成できます。
コンパイラの C++ 標準への準拠は、Visual C++ .NET 2003 で大いに強化されています。
/arch コンパイラ オプションが追加されました。
/Gf の使用は避けてください。次のバージョンの Visual C++ では削除されます。
/G7 コンパイラ オプションが追加されました。
/GS コンパイラ オプションが拡張され、直接バッファ オーバーランからローカル変数を保護できるようになりました。
/noBool コンパイラ オプションは削除されました。コンパイラでは、Visual C++ ソース コード ファイルで識別子ではなくキーワードとしてだけ bool を使用できます。
long long 型は、__int64 の typedef として使用できます。CRT では、long long はまだサポートされていません。
/Zm コンパイラ オプションは、プリコンパイル済みヘッダーのメモリ割り当て制限を指定するようになりました。
_InterlockedCompareExchange 組み込み関数が文書化されました。
_InterlockedDecrement 組み込み関数が文書化されました。
_InterlockedExchange 組み込み関数が文書化されました。
_InterlockedExchangeAdd 組み込み関数が文書化されました。
_InterlockedIncrement 組み込み関数が文書化されました。
_ReadWriteBarrier 組み込み関数が追加されました。
Visual C++ 属性
- implements 属性は文書化されました。
リンカ
次のリンカ オプションが追加されました。
/ASSEMBLYDEBUG (DebuggableAttribute の追加)
/ASSEMBLYLINKRESOURCE
/DELAYSIGN
/KEYFILE
/KEYCONTAINER
/SAFESEH
プリプロセッサ
/MD で使用する _STATIC_CPPLIB シンボルが文書化されました。
_CPPLIB_VER シンボルが文書化されました。
#import ディレクティブの次の属性が文書化されました。
auto_search
auto_rename
no_search_namespace
rename_search_namespace
tlbid
MASM
.SAFESEH ディレクティブと /safeseh ml.exe オプションが追加されました。
Visual C++ のライブラリ
古い iostream ライブラリ
古い iostream ライブラリは、このリリースの Visual C++ から削除されました。入出力ストリームのプログラミングには標準 C++ ライブラリを使用してください。
C ランタイム ライブラリ
C ランタイム ライブラリのドキュメントには、.NET Framework の同等の機能に関する情報が含まれています。
_get_heap_handle が追加されました。
_CrtSetDbgFlag で使用される _CRTDBG_CHECK_DEFAULT_DF マクロは、ゼロに定義されています。これは、既定ではヒープ チェックが行われないことを意味します。
swprintf は、ISO C 標準 (C++ のみ) と互換性があります。
vswprintf は、格納する最大文字数を指定する C++ だけの形式を持ちます。
_mbsset などの一部のマルチバイト関数では、CRT が、先頭バイトに null の後続バイトが続く無効なマルチバイト文字列を常に検出するとは限りませんでした。CRT は、先頭バイトに null の後続バイトが続く無効なマルチバイト文字をより厳密にチェックするようになりました。
_set_purecall_handler が追加されました。
以前は、CRT ライブラリを静的に参照する DLL をプロセスが読み込んだときに、浮動小数点数の精度が 53 ビットに初期化されました。Visual C++ .NET 2003 では、浮動小数点数の精度はこのシナリオで初期化されません。これにより、CRT に依存して浮動小数点数の精度を初期化する既存のアプリケーションの一部で、互換性を損なう変更点が発生する可能性があります。
CRT は、すべての数値演算関数に対して浮動小数点数形式と倍精度浮動小数点数形式を持ちます。これらの新しい関数を呼び出すことができるのは、Visual C++ からだけです。
標準 C++ ライブラリ
以前のリリースでは、ストリームへの文字の入出力の結果、wchar_t がネイティブ型として定義されていない場合に文字または unsigned short の値が格納されることがありました。現在は、unsigned short は常に文字として扱われます。
Visual C++ .NET 2003 では、<hash_map> ヘッダー ファイルと <hash_set> ヘッダー ファイルのメンバは、std 名前空間に存在しなくなり、stdext 名前空間に移動されました。
標準 C++ ライブラリが更新され、C++ 標準に対する拡張された Visual C++ コンパイラ サポートを利用するようになりました。たとえば、Visual C++ に付属している標準 C++ ライブラリの実装は、部分的に特化されたテンプレートを利用します。
ATL
- Visual Studio .NET 2003 では、MIDL コンパイラの既定の設定が /robust であるため、Windows NT 4 で実行していたプロジェクトが応答しなくなります。
MIDL コンパイラのフラグを /no_robust に変更するには
プロジェクトを右クリックし、ショートカット メニューの [プロパティ] をクリックします。
[プロジェクト プロパティ] ダイアログ ボックスが表示されます。
左ペインの [MIDL] をクリックし、[コマンド ライン] を選択します。
[追加のオプション] ボックスに、「/no_robust」と入力します。
ATL 文字列変換マクロ USES_CONVERSION は、USES_CONVERSION_EX に取って代わられました。このマクロは、スタックの領域の割り当てを試みます。スタックに使用可能な領域がない場合は、ヒープを試します。ヒープに領域がない場合は、NULL を返します。USES_CONVERSION_EX には、ユーザーが使用できる追加のパラメータ (threshold) があります。要求が threshold のサイズよりも大きい場合は、マクロが直接ヒープに入ります。
_alloca は、_atl_safe_alloca に置き換えられました。
CSocketAddr クラスが追加され、IPv6 と IPv4 の両方のアドレスを扱う、プロトコルに依存しない方法を提供しています。
実行可能ファイルを出力するプロジェクトをビルドする場合、ATL は、%MODULE% レジストラ スクリプト パラメータで実行時に作成されたパス名の前後に引用符を自動的に追加します。パス名を引用符で囲まない場合は、新しい %MODULE_RAW% パラメータを代わりに使用します。
DLL を出力するプロジェクトをビルドする場合、ATL は、%MODULE% または %MODULE_RAW% を使用する場合でもパス名に引用符を追加しません。
MFC
コネクション マップは、コネクション ポイントが削除されたときに圧縮されなくなりました。代わりに、削除されたコネクション ポイントが NULL で置換されます。したがって、CConnectionPoint::GetConnections または CConnectionPoint::GetNextConnection を使用する場合は NULL をチェックする必要があります。
CSimpleString::FreeExtra、CSimpleString::GetAt、CSimpleString::operator []、CSimpleString::ReleaseBuffer、CSimpleString::ReleaseBufferSetLength、CStrBuf::SetLength の各関数と一部の CTime::CTime コンストラクタは、例外をスローすることがあります。
AfxIsValidAddress と AfxIsValidString の動作が変更されました。非デバッグ ビルドでは、両方の関数は NULL 以外の引数をテストします。
CHeaderCtrl::GetOrderArray には、既定の第 2 パラメータがなくなりました。-1 は第 2 パラメータの有効値ではなくなりました。
CAsyncSocket には、IPv6 対応の新しいメンバが追加されました (GetPeerNameEx、GetSockNameEx、ReceiveFromEx、および SendToEx)。
ATL と MFC
CImage クラスは、作成されたオブジェクト数を追跡するようになりました。オブジェクトの数が 0 になると、GdiplusShutdown 関数が自動的に呼び出され、GDI+ が使用しているリソースが解放されます。これにより、CImage オブジェクトが DLL により作成されたときに、リソースが解放されないことを防ぎます。
MFC CString クラスは、テンプレート クラス CStringT として書き直されました。これにより、より大きな MFC スタティック ライブラリまたは DLL でリンクせずに、ATL プロジェクトで CString を使用できます。
メモ : このリリースでは、サポート技術情報の文書「PRB: Linking Errors When You Import CString-Derived Classes (Q309801)」で説明されている問題を解決しました。サポート技術情報の文書は、MSDN ライブラリ CD-ROM または https://support.microsoft.com/default.aspx で参照できます。CString 派生クラスを Visual C++ .NET 2002 の MFC 拡張 DLL からエクスポートするときにリンカ エラーが発生し、この文書で説明されている問題回避を適用した場合は、問題が Visual C++ .NET 2003 で解決されているため、問題回避コードを削除する必要があります。
CStrBufT と CSimpleStringT には、CString を MFC DLL から使用するかどうかを示す追加のテンプレート パラメータがあります。グローバル typedef ではなく、atlsimplstr.h の CStringT または CSimpleStringT クラスにある typedef を使用してください。
ATL Server
ATL Server で作成される XML Web サービスの既定のアクションでは、SOAP パラメータは読み取られた後に検証されます。検証をオフにするには、_ATL_SOAP_NO_PARAMETER_VALIDATIONS マクロを定義します。
SPROXY.EXE は、.discomap ファイルまたは .wsdl ファイルを処理できます。.wsdl ファイルを入力として使用する場合は、新しい /wsdl オプションを指定します。
sproxy /wsdl <input_location>
<input_location> は、使用する .wsdl ファイルのパスです。
SPROXY.EXE は、results.discomap ファイルを処理できるようになりました。
sproxy results.discomap
.discomap ファイルは、.wsdl ファイルのローカル コピーへのリンクを含み、スキーマ ファイルのローカル コピーも使用します。
開発環境
メモ : |
---|
ここで説明している機能のいくつかは、現在のバージョンの Visual C++ には存在しない可能性があります。詳細については、「Visual C++ 2005 とそれ以前のエディションの変更点」を参照してください。 |
Visual Studio .NET の Visual C++ プロジェクトを Visual C++ .NET 2003 で開くと、古いプロジェクト ファイル名が変更され、Visual C++ .NET 2003 環境用の新しいプロジェクト ファイルが作成されます。
.vcproj ファイルの形式が文書化されました。
開発環境には次の新機能があります。
$(WebDeployPath)、$(WebDeployRoot)、$(ParentName)、$(RootNameSpace)、$(SafeParentName)、$(SafeInputName) の各マクロが追加されました。
プロジェクトに依存するプロジェクトをビルドせずに、プロジェクトをビルドできるようになりました。
C++ マネージ拡張プロジェクト テンプレート
このリリースには、C++ マネージ拡張によるアプリケーションの作成に使用できる新しいプロジェクト テンプレートがいくつか含まれています。
Windows コントロール ライブラリ (.NET)
Windows フォーム アプリケーション (.NET)
Windows サービス (.NET)
また、Visual C++ .NET 2002 のマネージ プロジェクトのテンプレートは、このリリースで名前が変更されました。
Managed C++ アプリケーションは、現在はコンソール アプリケーション (.NET) と呼ばれます。
マネージ C++ クラス ライブラリは、現在はクラス ライブラリ (.NET) と呼ばれます。
Managed C++ の空プロジェクトは、現在は空プロジェクト (.NET) と呼ばれます。
Managed C++ Web サービスは、現在は [ASP.NET Web サービス] と呼ばれます。
C++ マネージ拡張の Windows フォーム デザイナ
このリリースの Windows フォーム デザイナの追加では、Visual C++ に、C++ マネージ拡張で Windows フォーム アプリケーションを作成するための RAD (Rapid Application Development) ソリューションが導入されました。
この機能には、Windows フォーム アプリケーションにコントロールとコンポーネントを直接ドラッグ アンド ドロップまたは切り取って貼り付けできる、ツールボックスとサーバー エクスプローラの完全なサポートが含まれます。また、プロパティ グリッドを使用して、コントロールとコンポーネントのプロパティを簡単に操作できます。
プロジェクト ビルド オートメーション モデル
Visual C++ .NET には、新しいプロパティ ページと多数の新規オブジェクトと共に、プロジェクト ビルド モデルを拡張する既存のオブジェクトの新しいプロパティとメソッドが用意されています。
新しいプロパティ ページ
[マネージ リソース] プロパティ ページ
[XML データ ジェネレータ ツール] プロパティ ページ
[マネージ ラッパー] プロパティ ページ
[補助マネージ ラッパー] プロパティ ページ
新規オブジェクト
VCALinkTool オブジェクト
VCActiveXReference オブジェクト
VCAssemblyReference オブジェクト
VCAuxiliaryManagedWrapperGeneratorTool オブジェクト
VCManagedResourceCompilerTool オブジェクト
VCManagedWrapperGeneratorTool オブジェクト
VCPrimaryInteropTool オブジェクト
VCProjectReference オブジェクト
VCReference オブジェクト
VCReferences コレクション
VCReferenceConfiguration オブジェクト
VCXMLDataGeneratorTool オブジェクト
既存のオブジェクトの新規メンバまたは変更されたメンバ
いくつかの新規または更新されたプロパティとメソッドが、既存のオブジェクトに追加されました。変更には、更新されたシグネチャや新規メンバの追加など、複数の項目が含まれます。
オブジェクト |
新規または変更されたメンバ |
---|---|
VCCLCompilerTool オブジェクト |
EnableEnhancedInstructionSet プロパティ |
|
ToolKind プロパティ |
VCLinkerTool オブジェクト |
FixedBaseAddress プロパティ |
|
ToolKind プロパティ |
VCLibrarianTool オブジェクト |
ToolKind プロパティ |
VCCustomBuildTool オブジェクト |
ToolKind プロパティ |
VCMidlTool オブジェクト |
ToolKind プロパティ |
VCResourceCompilerTool オブジェクト |
ToolKind プロパティ |
VCPreBuildEventTool オブジェクト |
ToolKind プロパティ |
VCPreLinkEventTool オブジェクト |
ToolKind プロパティ |
VCPostBuildEventTool オブジェクト |
ToolKind プロパティ |
VCBscMakeTool オブジェクト |
ToolKind プロパティ |
VCNMakeTool オブジェクト |
ToolKind プロパティ |
VCWebServiceProxyGeneratorTool オブジェクト |
Namespace プロパティ (VCProjectEngine) |
|
References プロパティ |
|
ToolKind プロパティ |
VCWebDeploymentTool オブジェクト |
ToolKind プロパティ |
VCProject オブジェクト |
AddAssemblyReference メソッド |
|
AddActiveXReference メソッド |
|
AddProjectReference メソッド |
|
CanAddAssemblyReference メソッド |
|
CanAddActiveXReference メソッド |
|
CanAddProjectReference メソッド |
|
Object プロパティ |
|
References プロパティ |
|
ReferencesConsumableByDesigners プロパティ |
|
RemoveReference メソッド |
|
RootNamespace プロパティ |
|
VCReferences プロパティ |
VCFile オブジェクト |
AddFile メソッド |
|
CanAddFile メソッド |
|
FileType プロパティ |
|
Items プロパティ |
|
Object プロパティ |
|
RemoveFile メソッド |
VCFilter オブジェクト |
Object プロパティ |
VCConfiguration オブジェクト |
FullReferencesPath プロパティ |
|
ReferencesPath プロパティ |
|
ReferenceTools プロパティ |
|
SatelliteDLLs プロパティ |
|
StopBuild メソッド |
|
StyleSheets プロパティ |
VCStyleSheet オブジェクト |
FullReferencesPath プロパティ |
|
ReferencesPath プロパティ |
|
ReferenceTools プロパティ |
|
StyleSheetDirectory プロパティ |
|
StyleSheetName プロパティ |
VCFileConfiguration オブジェクト |
ProjectConfiguration プロパティ |
|
Compile メソッド |
|
OutputUpToDate プロパティ |
VCProjectEngine オブジェクト |
ShowEnvironmentInBuildLog プロパティ |