Visual C++ 2005 ライブラリの変更点
更新 : 2007 年 11 月
次のセクションでは、Visual C++ に同梱されるライブラリの更新内容および互換性に影響する変更について説明します。
このセクションの内容
ライブラリの一般的な変更内容
互換性に影響する変更点
混在モードでは、ネイティブ コンストラクタはマネージ コンストラクタの前に呼び出されます。単独の実行可能ファイルでは、ネイティブ オブジェクトとマネージ オブジェクトが同じコンパイル ユニットにあるかどうかにかかわらず、すべてのネイティブ グローバル オブジェクトのコンストラクタは、マネージ グローバル オブジェクトのコンストラクタの前に呼び出されます。
したがって、マネージ コンストラクタがネイティブ コンストラクタより前に呼び出されることに依存するアプリケーションが正常に動作しなくなることがあります。
グローバル オブジェクト間に依存関係がある場合は、マネージ オブジェクトからネイティブ オブジェクトへの依存関係だけにする必要があります。オブジェクトを確実にマネージまたはネイティブにする最良の方法は、該当する方法でビルドされるコンパイル ユニットに含めることです。
ライブラリの変更によるマニフェスト ベースのアセンブリ生成のサポート
Visual C++ 2005 では、標準 C++ ライブラリ、ATL ライブラリ、MFC ライブラリ、および CRT ライブラリは、マニフェストを持つ side-by-side 共有アセンブリになります。同様に、コンパイラとリンカは、既定で mt.exe を使用してマニフェストを生成する設定になっています。これにより、すべての Visual C++ 実行可能ファイルが ATL、MFC、および CRT への依存を参照するマニフェストを持ちます。詳細については、「Visual C++ ライブラリの共有 side-by-side アセンブリとしての配布」、「配置 (C++)」、および「C/C++ 分離アプリケーションおよび side-by-side アセンブリのビルド」を参照してください。
メイクファイルを使用してプロジェクトをビルドする場合は、「方法 : マニフェストを C/C++ アプリケーションに埋め込む」を参照してください。
混在アセンブリのためのライブラリ サポート
Visual C++ 2005 は、/clr でコンパイルされた混在アセンブリとして標準 C++ ライブラリ、ATL ライブラリ、MFC ライブラリ、および CRT ライブラリの使用をサポートします。この混在ライブラリによって、__clrcall コードがネイティブ コードと MSIL ベースのコードを含む場合に既存のすべての関数を使用できます。詳細については、「混在 (ネイティブおよびマネージ) アセンブリ」を参照してください。
混在アセンブリの初期化
Visual C++ 2005 のライブラリ サポートの変更によって、Visual C++ .NET と Visual C++ .NET 2003 が混在する DLL のローダー ロックの問題が解決されます。ただし、DllMain コードが CLR にアクセスできないという制約はあります。詳細については、「混在 (ネイティブおよびマネージ) アセンブリ」を参照してください。
純粋なモードのコンパイルがサポートしないライブラリ
Visual C++ 2005 では、ATL ライブラリと MFC ライブラリは純粋なモードのコンパイル (/clr:pure) でサポートされていません。