Delphi® 2007 for Win32® および C++Builder®2007 のリリース ノート

By: Masahiro Arai

Abstract: このファイルには、製品の主要な文書に書かれていない重要な追加情報が記載されています。このファイルのすべての内容に目を通されることをお勧めします。

    Delphi® 2007 for Win32® および C++Builder®2007 のリリース ノート

このファイルには、製品の主要な文書に書かれていない重要な追加情報が記載されています。このファイルのすべての内容に目を通されることをお勧めします。

このドキュメントで "本製品" とは、Delphi 2007 for Win32 および C++Builder 2007 の両方を指します。

インストール、配布、およびライセンスの問題については、Install、Deploy、License の各ファイルを参照してください。これらのファイルは、デフォルトで C:\Program Files\CodeGear\RAD Studio\5.0 に置かれています。

    目次

    本製品のインストール、アンインストール、およびアップブレード

  • 本製品をインストール、アンインストール、またはアップグレードする前に、INSTALL ファイルおよび LICENSE ファイル参照して、インストールおよびライセンスに関する詳細情報を確認してください。この 2 つのファイルは、デフォルトでは次の場所にあります。

    C:\Program Files\CodeGear\RAD Studio\5.0\install.htm C:\Program Files\CodeGear\RAD Studio\5.0\license.rtf

    たとえば、install.htm ファイルには、C++Builder をインストールするために必要な空き容量(2.25 GB)が記載されています。

  • 正しい順序で製品をインストールしないと問題が発生する場合がありますので、正しい順序でインストールしてください。次に例を示します。

    • C++Builder 2007 をインストールした後に Borland Developer Studio 2006 をインストールしないでください。 この組み合わせを実行すると、BDS 2006 を起動できません。 登録を完了した後に、次のエラーが発生します。

      Exception EPackageRegistrationException in module coreide100.bpl at 000DB245.Registration procedure, Cppproject.IDERegister in package C:\Program Files\Borland\BDS\4.0\Bin\bcbide100.bpl raised exception class EOleSysError:OLE error 80131040, ClassID: {F8FEDD39-E3CE-4B8D-A657-9CA24686881F}

      この場合、アセンブリは BDS 2006 のインストールに正しく登録されていません。.NET 2.0 と .NET 1.1 がシステムに共存している場合に、システムは borland.studio.toolsets.dll をロードできません。回避策は、アセンブリ ローダーで対象アセンブリに .NET 1.1 を使うように強制します。詳細については、次の項目を参照してください。

      http://qc.codegear.com/wc/qcmain.aspx?d=28728

      http://qc.borland.com/wc/qcmain.aspx?d=22108

      http://support.codegear.com/article/36047

    • C++Builder 2007 をインストールした後に、元のリリース DVD(Update 1 以前)から Delphi 2007 for Win32 をインストールしないでください。両方の製品がインストールされません。代わりに、[スタート|すべてのプログラム|CodeGear RAD Studio|RAD Studio の変更、修正、アンインストール] を選択してから [アップグレード] を選択し、Delphi のシリアル番号を入力します。それから Delphi 2007 for Win32(Update 1)をインストールするインストーラの手順を続行します。

    • C++Builder 2007 と Delphi 2007 for Win32(Update 1)の両方をインストールする前に Delphi 2007 for Win32 をアンインストールしないでください。実行すると C++Builder が利用できなくなります(Delphi のみが利用可能)。この問題の回避策として、HKCU の該当するすべてのレジストリ キーを削除する必要があります。
  • 本製品をインストールするのに十分な空き容量がないときにインストーラにより警告が表示されません。C++Builder をインストールするためには C ドライブに約 2 GB の空き容量が必要です(別のドライブにインストールする場合でも必要)。十分な容量がない場合は、インストーラがハングアップすることもあります。

  • Delphi 2007 をアンインストールした後、一部のシステム ファイルや設定が削除され、再起動するまで .NET 2.0 のアンインストールや修復が実行できない場合があります。

  • IDE に登録し、同時に利用できる Microsoft® Office コントロールは 1 セットのみです。利用できるパッケージは、OfficeXP for Delphi Win32、OfficeXP for C++Builder、Office2000 for Delphi Win32 および Office2000 for C++Builder です。これらを IDE に登録するには、[コンポーネント|パッケージのインストール...] を選択します。

先頭へ

    一般的な注意事項

  • 両方の製品のデモは、製品のインストール方法と Windows Vista を使用しているかどうかによって、次の異なるディレクトリにインストールされます。
    • インストール時に [すべてのユーザー] を選択した場合、デモは C:\Documents and Settings\All Users\Shared Documents\RAD Studio\5.0\Demos にインストールされます。
    • インストール時に [インストールしたユーザーのみ] を選択した場合、デモは C:\Documents and Settings\My Documents\RAD Studio\5.0\Demos にインストールされます。
    • Windows Vista で、インストール時に [すべてのユーザー] を選択した場合、デモは C:\Users\Public\Documents\RAD Studio\5.0\Demos にインストールされます。
    • Windows Vista で、インストール時に [インストールしたユーザーのみ] を選択した場合、デモは C:Users\username\Documents\RAD Studio\5.0\Demos にインストールされます。
  • Indy10 は、本製品に統合されました。ただし、以前のバージョンである Indy9 を C:\Program Files\CodeGear\RAD Studio\5.0\source\Win32\Indy9 からインストールできます。
  • WebAppDebugger アプリケーションをパッケージでビルドするためには、実行時パッケージのリストで Indy10 パッケージの前に Indy9 パッケージをリストする必要があります。

    [コンポーネント|パッケージのインストール...] を選択します。

    次のとおり、[実行時パッケージの順序付きリスト] の先頭に "indy;" を追加します。

    indy;vcl;rtl;bcbie;vclx;vclactnband;xmlrtl;bcbsmp;dbrtl;vcldb;bdertl;vcldbx;dsnap;dsnapcon;teeUI;tee;teedb;vclib;ibxpress;adortl; dbxcds;dbexpress;DbxCommonDriver;IndyCore;IndySystem;IndyProtocols;inet;IntrawebDB_90_100;Intraweb_90_100;VclSmp;vclie;websnap;webdsnap;inetdbbde;inetdbxpress;soaprtl

    これは、両方の製品に当てはまります。

  • Web アプリケーションをデバッグするには、まず serverinfo.exe を実行して、このファイル自体を登録する必要があります。ファイルを実行すると、登録は自動的に行われます。この手順は、Web アプリケーション デバッガ(インストール ディレクトリの \bin フォルダにある WebAppDbg.exe)を使用するために必要です。
  • IntraWeb(VCL for the Web コンポーネントのヘルプを含む)の詳細については、http://www.atozed.com/intraweb/docs/ を参照してください。
  • .NET Framework および .NET SDK は、英語や日本語など複数の言語で表示できます。.NET Framework は、使用可能な言語をすべてインストールした後、システム ロケールにしたがって使用する言語を決定します。これに対して、.NET SDK はインストール時に選択した言語だけをインストールします。
  • COM サーバーを登録するには、実行パラメータとして /regserver を付けて実行する(初回起動時のみ)必要があります。次の手順に従ってください。
    1. プロジェクトを作成します。
    2. プロジェクトを保存します。
    3. [実行|実行時引数...] に /regserver を追加します。
    4. プロジェクトを実行します。アプリケーションが登録されたら、終了します。
    5. [実行|実行時引数...] ページから、/regserver を削除します。
  • VCL コンポーネント ベンダーへの注意:
    コンポーネントのインストーラによって、本製品のレジストリにコンポーネントのパスを追加する場合は、次の下の HKEY_LOCAL_MACHINE にレジストリ キーを 1 つ追加する必要があります。

    Software\Borland\BDS\5.0\Globals

    ForceEnvOptionsUpdate という文字列値を追加します(既に存在する場合は更新します)。その値を文字列値 "1" に設定します。この値が "1" の場合、次回 IDE が実行されたときに、ディスク上の EnvOptions.proj ファイルが更新されて、コンポーネント インストーラが追加したパスが追加されます。EnvOptions.proj ファイルは、IDE の新しい MSBuild ビルド エンジンが、IDE の [ツール|オプション...] ダイアログの [Library - Win32] ページに登録されているパスをインクルードするために利用するメカニズムです。

    コンポーネント インストーラが次のレジストリ キーのいずれかを更新する場合も、 Globals\ForceEnvOptionsUpdate キーの追加または更新が必要です。

    • Software\Borland\BDS\5.0\Library\Browsing Path
    • Software\Borland\BDS\5.0\Library\Debug DCU Path
    • Software\Borland\BDS\5.0\Library\Namespace Search Path
    • Software\Borland\BDS\5.0\Library\Package DCP Output
    • Software\Borland\BDS\5.0\Library\Package DPL Output
    • Software\Borland\BDS\5.0\Library\Search Path

先頭へ

    既知の問題

    DLL を動的にロードする場合、動的リンク RTL は使用できません

DLL を動的にロードする場合、ランタイム ライブラリを動的にリンクできません。ロードしない場合は、プログラムを終了すると、アクセス違反が発生します。回避策は、プロジェクト オプションの [リンカ|リンク] ページにある [リンク] セクションの [動的 RTL] チェック ボックスをオフにします。

    GdiPlus ライブラリでは #define NO_STRICT をオフにする必要があります

C++ の GdiPlus ライブラリは、非 STRICT モードでは使用できません。これは Graphics::Graphics(HDC) が Graphics::Graphics(HWND) と区別できる必要があるからです。非 STRICT モードでは、HWND と HDC はともに "void*" です。別のモードでは、次のエラーが発生します。
[C++ Error] GdiplusGraphics.h(37):E2015 Ambiguity between 'Gdiplus::Graphics::Graphics(void *)' and 'Gdiplus::Graphics::Graphics(void *,int)'

    ActiveX

C++ Builder 6 で作成された ActiveX ライブラリ プロジェクトを C++ Builder 2007 で開き、実行すると、[ActiveX サーバーの登録] と [ActiveX サーバーの削除] メニューが有効になりません。 回避策は、 [実行|実行時引数...] を選択して、[ホストアプリケーション] に "C:\windows\system32\regsvr32.exe"、[パラメータ] に <プロジェクト名> を設定します。

先頭へ

    C++Builder コンパイラに関する注意事項

    旧バージョンの C++ コンパイラとのバイナリ非互換性

C++ ランタイム ライブラリが強化され、最新の Dinkumware 5.01 に変更されました。この変更に伴って、C++Builder 2007 のコンパイラによって生成されたバイナリ オブジェクトが、旧バージョンでコンパイルされたものと異なる場合があります。非互換の部分は、主に C++ 標準ライブラリに限定されます。基本的な C++ アプリケーション バイナリ インターフェイス(ABI)については変更ありません。

    デフォルト値 nil を持つ Delphi インターフェイス パラメータの扱いが変更されました。Delphi インターフェイスに void * 型を割り当てると、コンパイル エラーが発生します。

以前の Delphi コンパイラ(DCC32)は、インターフェイス パラメータがデフォルト値 nil を持つ場合、.hpp ファイル内に次のようなコードを生成しました。

  void methodName(_di_IIntf param = (void *)(0x0));

C++ コンパイラは、以前は、この構文を誤って受け入れていました。

このリリースでは、Delphi コンパイラおよび C++ コンパイラの両方で、この場合の扱いが変更されています。

Delphi コンパイラは、デフォルト値 nil を持つインターフェイス パラメータに対して、.hpp ファイル内に次のようなコードを出力するようになりました。

  void methodName(_di_IIntf param = _di_IIntf());

C++ コンパイラは、Delphi インターフェイスに "void *" 型を割り当てたコードに対して、エラーを出力するようになりました。 たとえば、次の行は

  void methodName(_di_IIntf param = (void *)(0x0));

コンパイルに失敗し、次のエラーが出力されます。

  Cannot convert 'void *' to '_di_IIntf'

デフォルト値 nil を持つインターフェイス パラメータを含む Delphi コードがある場合は、DCC32 で再コンパイルしてください。ソースがない場合は、.hpp ファイルを編集し、該当箇所をすべて次のように変更してください。

  void methodName(_di_IIntf param = (void *)(0x0));

これを次のように変更します。

  void methodName(_di_IIntf param = _di_IIntf());

    Delphi コードに対する両方のシンボル参照情報オプションの選択

C++Builder プロジェクト内で Delphi コードをコンパイルする場合、現在は、 [プロジェクト...|オプション|Delphi コンパイラ|コンパイル] ダイアログ ボックスのシンボル参照情報オプションのいずれか 1 つのみ([定義のみ] または [参照情報] のいずれか)を選択できます。ただし、以下のソースレベル指令($ xx )を使用すると、 これらのオプションの両方を選択することができます。
  • 定義情報($YD)オプション: Delphi コンパイラは、各識別子が定義されている場所についての情報を記録します。変数、定数、クラスなどのほとんどの識別子に対して、コンパイラはその宣言の場所を記録します。手続き、関数、およびメソッドに対しては、コンパイラは実装の場所を記録します。これにより、コード エディタでの参照が可能になります。
  • 参照情報($Y+)オプション: Delphi コンパイラは、各識別子が定義されている場所だけでなく、それらが使用されている場所についての情報も記録します。これにより、プロジェクト ブラウザの参照ページが使用可能になります。
これらのコンパイラ オプションは、デバッグ情報( $D )オプションと、ローカル デバッグ シンボル( $L )オプションの両方がオンの場合にのみ利用できます。

    WebSnap ディレクトリの指定

C++Builder を WebSnap と一緒に使用している場合は、実行可能ファイルが HTML ファイルと同じディレクトリに書き込まれることを確認してください。実行可能ファイルがプロジェクト ディレクトリに書き込まれるようにするには、 [プロジェクト|オプション...|パスとシンボル定義|最終出力] にドット(".")を入力します。

    プリコンパイル済みヘッダーの場所の変更

C++ のプリコンパイル済みヘッダー ファイル(PCH)は、BDS2006 とは異なるファイル格納場所に保存されます。BDS2006 からプロジェクトをインポートした場合、本製品はプロジェクトの PCH ファイル格納場所をインポートしません。 [プロジェクト|オプション...|C++コンパイラ|プリコンパイル済みヘッダー|PCH ファイル名] で PCH ファイルを設定できます。

    Delphi コンパイラから C++ ファイルを生成

.pas ファイルから .hpp ファイル(対応する .obj を含む)を生成する場合は、dcc32.exe で -JPHNE スイッチを指定する必要があります。あるいは、.pas ファイルを含む .dpk ファイルで -JL スイッチを使用します。

    C++ コンパイラの変更点

C++ ANSI Standard への準拠度を高めるため、C++Builder 2007 と一緒に出荷される C++ コンパイラは、旧バージョンよりも厳密になりました。旧バージョンの C++Builder ではエラーが発生しなかったコードが、C++Builder 2007 ではコンパイルエラーになる場合があります。ここでは、コンパイラがより厳密になった一般的な領域をいくつか列挙します。ケースごとに、問題が発生する例と、 C++Builder 2007 でコンパイルするためのコードの修正方法を示します。ただし、問題のあるコードの修正方法は、通常は複数あります。どの方法が適切かは、元のコードの目的によって異なります。

    1. 参照および限定子のバインディング

C++Builder 2007 に付属するC++ コンパイラでは類似するエラーメッセージが出力される構文が数多くあります。それらは以下のカテゴリに分類されます。

  1. 非constのlvalueを非const参照にバインディングする。許可するには、コンパイラスイッチ -Vbr を使用してください。
  2. 一時変数を非const参照にバインディングする。許可するには、コンパイラスイッチ -Vbr を使用してください。
  3. constまたはvolatileなオブジェクトをそれぞれ非constまたは非volatileなメソッドにバインディングする。許可するには、コンパイラスイッチ -Vbn を使用してください。

旧バージョンの Borland C++ コンパイラでは、様々な形式で非const参照のパラメータにバインディングすることが許されていました。次の例のように、psize というパラメータを単純にキャストすることが許されていました。

int takesLongRef(long& l);
int takesUnsignedPtr(unsigned long* psize) {
  return takesLongRef((long)*psize);
}

C++Builder2007 では、上のコードは次のコンパイルエラーが出力されます。

[BCC32 エラー] test.cpp(3): E2357 参照は 'long' で初期化されているが 'long' 型の左辺値が必要
[BCC32 エラー] test.cpp(3): E2342 パラメータ 'l' は long & 型として定義されているので long は渡せない

これを解決するには、次のように、逆参照する前に psize をキャストします。

int takesLongRef(long& l);
int takesUnsignedPtr(unsigned long* psize) {
  return takesLongRef(*reinterpret_cast<long*>(psize));
}

不明瞭な形で一時変数が介在する場合があることに注意してください。例えば、2項演算子の中には、暗黙の一時変数を必要とするものがあります。

enum { zero, one, two } num;
num |= two; // 許されません
num = num | two; // OK

その他にも不明瞭な形で一時変数が介在する場合として、プロパティの戻り値があります。次のコード例は、旧バージョンの C++ コンパイラではコンパイルできました。

#include <vcl.h>
class TTest {
   WideString FData ;
public:
   __property WideString Data = {read = FData };
};

void Func(WideString& wref);

void test() {
   TTest t;
   Func(t.Data);
}

C++Builder 2007 では、上のコードは次のコンパイルエラーが出力されます。

[BCC32 エラー] test.cpp(14): E2357 参照は 'const WideString' で初期化されているが 'WideString' 型の左辺値が必要
[BCC32 エラー] test.cpp(14): E2342 パラメータ 'wref' は WideString & 型として定義されているので WideString は渡せない

これを解決するには、次のように参照を const 参照に変更します。

void Func(const WideString& wref);

-Vbn および -Vbr スイッチを有効にすれば、これらの構文を強制的にコンパイルできるようになります。ただしCodeGearでは、コードにより意図しない結果が生じる可能性があるため、標準に準拠するようコードを変更することを推奨します。

    1.1 調停エラー ダイアログ

上で説明した一時変数と参照の問題は、旧バージョンの 調停エラー ダイアログ ウィザードで生成されたコードで発生します。これを解決するには、VarToAnsiStr メソッドを探します。

  AnsiString VarToAnsiStr (Variant &V, TFieldType DataType)

これを、次のように const Variant& を取るように変更します。

  AnsiString VarToAnsiStr (const Variant &V, TFieldType DataType)

    2. 文字列リテラルは定数として扱われます

文字列リテラルは、デフォルトでは 'const char[]'型として扱われるようになりました。これにより、const値やconst型に対するより厳密な限定バインディングと共に使用すると、以前はコンパイルできたコードでエラーメッセージが出力されることがあります。

コンパイラスイッチ -Vbs を有効にして、文字列リテラルを非constとして扱わせることも可能です。ただしCodeGearでは、コードを変更することを推奨します。

この文字列リテラルの型の変更により、コンパイラがオーバーロードされたメソッドの呼び出しの解決方法も変更することに注意してください。以下に例を示します。

void foo(char *);
void foo(const char *);
foo("string"); // 新しいコンパイラは foo(const char *) を選択します

    3. テンプレートの変更

新しいC++ コンパイラでは、接頭語 'template <>' を指定しない明示的なテンプレートの特化は許可されなくなりました。許可するには、コンパイラスイッチ -Vbe を使用してください。以下に例を示します。

template<class>
class foo {
  foo();
};
foo<int>::foo(); // エラー
template<> foo<int>::foo(); // OK

また、新しいC++ コンパイラでは、クラス内での明示的なテンプレートの特化も許可されなくなりました。許可するには、コンパイラスイッチ -Vbx を使用してください。以下の例ではエラーが出力されます。

struct S {};
struct SP
{
  template <typename T> void foo(const T &) {}
  template <> void foo(const S &) {} // エラー
};

    4. 関数のオーバーロード解決

C++Builder 2007 コンパイラが旧バージョンから最も大きく変わった領域は、オーバーロードの解決(あいまい性の検出も含む)です。以前は許されていた処理が、あいまいである(または一致するものが無い)と報告され、その意図を明確にするために修正を求められます。

従来の動作に戻し、新しい厳密な動作を行わせないためのコンパイラオプションとして -Vbo が用意されています。

新しい動作の例を次に示します。

class X{};
void foo(X);
void foo(const X&);
void ambig() {
  X x;
  foo(x); //エラー
}

    4.1 std::abs() のあいまい性

標準の abs 関数でもあいまい性エラーが発生する場合があります。それは、さまざまなオーバーロード バージョンの abs が要求する型と正確に一致しないパラメータが渡された場合です。次に例を示します。

#include <limits>
bool test(long l) {
  return std::abs(l) > 0;
}

このコードでは、次のコンパイルエラーが出力されます。

[BCC32 エラー] test.cpp(5): E2015 'std::abs(int) at C:\dev\tp\sc\include\math.h:208' と 'std::abs(long double) at C:\dev\tp\sc\include\math.h:275' の区別が曖昧
[BCC32 警告] test.cpp(6): W8057 パラメータ 'l' は一度も使用されない

これを解決するには、呼び出したいオーバーロード型にキャストします。次に例を示します。

#include <limits>
bool test(long l) {
  return std::abs(static_cast<int>(l)) > 0;
}

    5. 初期化と変換

コンパイラは、初期化と変換に関する 2003 C++ ANSI Standard の 8.5.1 および 13.3.1 の規則に準拠するようになりました。

  1. 直接の初期化には、コンストラクタによる初期化を必要とします。ユーザー定義の変換処理は選択されなくなりました。
  2. 同一の型または派生した型のオブジェクトを用いるコピー初期化には、コンストラクタの呼び出しが必要になりました。
  3. 異なる型のオブジェクトを用いるコピー初期化は、ユーザー変換よりもコンストラクタを選択するようになりました。コンパイラが適合するユーザー変換を見つけた場合、さらに(あいまいな可能性のある)変換コンストラクタを探します。選択された変換関数が変換コンストラクタである場合、それを呼び出す際に変換先の型の一時変数を初期化します。その呼び出しの結果(変換コンストラクタのための一時変数になります)はその後、そのオブジェクトを直接初期化するために使用されます。従来の動作に戻すには、コンパイラオプション -Vbo を使用してください。
  4. キャスト

    明示的なキャストについては、コンパイラは一時変数に対して直接初期化を行うようになりました。以下に例を示します。

    // この例では、dstは変換先の型、srcは変換元の型です
    class A { };
    class V {
    public:
      V() { };
      V( const V & ) { }
      V( const A & ) { }
    };
    class G {
    public:
      G() { }
      operator V() { }
      operator A() { }
    };
     
    G g; V v;
    // 直接初期化
    // ==> コンストラクタが選択されます。
    V v9(g);
    // この文は、bcc32 5.82 ではコンパイルできますが、新しいコンパイラではエラーが発生します
    // エラー E2015: 'V::V(const V &)' と 'V::V(const A &)' の区別が曖昧
     
    // キャスト
    // (V)g は V tmp(g) として扱われ、'tmp' を直接初期化します。
    // ==> コンストラクタが選択されます。
    (V)g;
    static_cast<V>(g);
    // これらの文は、bcc32 5.82 ではコンパイルできますが、新しいコンパイラではエラーが発生します
    // エラー E2015: 'V::V(const V &)' と 'V::V(const A &)' の区別が曖昧
     
    // dst=V, src=G によるコピー初期化
    // ==> ユーザー定義の変換処理が選択されます。
    V v4 = g;
    V v5 = G();
    // これらの文は、新しいコンパイラではコンパイルできますが、bcc32 5.82 ではエラーが発生します
    // エラー E2015: 'V::V(const A &)' と 'V::V(const V &)' の区別が曖昧
     
    // dst=V, src=V によるコピー初期化
    // ==> Vのコンストラクタによる変換が選択されます。
    V v6 = (V)g;
    V v7 = V(g);
    // これらの文は、bcc32 5.82 ではコンパイルできますが、新しいコンパイラではエラーが発生します
    // エラー E2015: 'V::V(const V &)' と 'V::V(const A &)' の区別が曖昧

    5.1 ユーザー定義演算子による変換

新しい C++Builder 2007 コンパイラでは、ユーザー定義演算子を伴う変換に対して、あいまい性が報告されることがしばしばあります。次に例を示します。

class AnsiString
{
public:
  bool operator ==(const AnsiString& other);
  AnsiString(const wchar_t* src);
};

class Variant
{
public:
  operator AnsiString() const;
  operator wchar_t*() const;
  bool operator ==(const AnsiString& rhs) const
  { return static_cast<AnsiString>(*this) == rhs;}
};

C++Builder ユーザーは、上の例が、VCL の AnsiString クラスと Variant クラスを移植したバージョンであることに気付いたかもしれません。旧バージョンのコンパイラは、 'static_cast<AnsiString>(*this)' に対して 'Variant' 'operator AnsiString() const' を呼び出しました。一方、C++Builder 2007 は、'コンストラクタによる変換' を使用します。Variant は、複数存在するAnsiStringのコンストラクタを通して複数の型に変換することが可能なので、コンパイラはあいまい性エラーを出力します。

このエラーを解決するには、次のようにキャストを除去する必要があります。

bool operator ==(const AnsiString& rhs) const
{ return (*this) == rhs;}

また、その演算子を明示的に使用することもできます。

bool operator ==(const AnsiString& rhs) const
{ return this->operator AnsiString() == rhs; }

    5.2 Variant/OleVariant/AnsiString/WideString/TDateTime

上で説明したユーザー定義の変換演算子とコンストラクタによる変換の違いによる問題は、VCL クラスの Variant、OleVariant、AnsiString、WideString、TDateTime、Currency などを含む構文で発生する場合があります。次の表に、エラーメッセージが出力される構文と、その修正後の構文を示します。

修正前の構文 修正後の構文 メモ
AnsiString test(OleVariant v) {
  AnsiString ret = (AnsiString) v;
  return ret;
}
AnsiString test(OleVariant v) {
  AnsiString ret = /*(AnsiString)*/ v;
  return ret;
}
代入の際に変換演算子を使用している場合は、RHSをキャストしないでください。
WideString test(OleVariant v) {
  WideString w(v);
  return w;
}
WideString test(OleVariant v) {
  WideString w = v;
  return w;
}
直接的なコンストラクタの代わりに、コピーによる初期化を使用してください。

上で説明したエラーに対応するコンパイラの変更は、現在のコンパイラが初期化および変換の処理を行う方法に関係しています。

先頭へ

    Windows VistaTMに関する注意事項

  • Windows Vista の場合は、インストールを実行する際に、管理者権限を持つユーザーとしてログインする必要があります。これは、Program Files ディレクトリに変更を加えるために、高いセキュリティレベルが必要になるからです。
  • Windows Vista では、製品登録クライアントが動作しない場合があります。この問題を回避するには、Windows Live OneCare Firewall が表示されたときに [このプログラムを許可] を選択します。次に、製品登録クライアントを終了して、それを再起動します。[このプログラムをブロック] を選択しないでください。これを選択すると、それ以降の登録ができなくなります。
  • Windows Vista は古い WinHelp ヘルプビューア(WinHelp.exe)をサポートしません。.HLP ファイルを使用する場合は、Microsoft Web サイト(http://www.microsoft.com/downloads/details.aspx?familyid=6ebcfad9-d3f5-4365-8070-334cd175d4bb)を参照してください。
  • TAnimation コンポーネントを Vista で使用するには、[Win32] タブの下の TShellResource コンポーネントをプロジェクトに追加する必要があります。TShellResource を追加すると、次のリソースが追加されます。
    • FindFolder.res
    • FindFile.res
    • FindComputer.res
    • CopyFiles.res
    • CopyFile.res
    • RecycleFile.res
    • EmptyRecycle.res
    • DeleteFile.res
  • Windows Vista で BDE を使用している場合は、BDE が C:\<root> ディレクトリにファイルを書き込まないように、BDE を再設定する必要があります。それには、管理者としてログインし、Program Files\Common Files\Borland Shared\BDE にある bdeadmin.exe を実行します。Native の下の PARADOX をクリックし、NET DIR をルート ディレクトリ以外の場所を参照するように変更します。推奨するディレクトリは、C:\Users\Public\Documents\RAD STUDIO です。
  • Windows Vista の拡張子を持つマニフェストを、Windows XP Service Pack 2(SP2)の .exe ファイルまたは .dll ファイルに追加した場合は、コンピュータが再起動する場合があります。この問題およびホットフィックスの詳細については、http://support.microsoft.com/kb/921337 を参照してください。
  • コモン ダイアログ コンポーネントを含む既存の VCL アプリケーションを再構築して、Vista システムで実行すると、従来のダイアログ(オープン、保存、メッセージ )ではなく、Vista 形式のダイアログ(ファイルおよびタスク)が使用されます。従来のダイアログを使用したい場合は、グローバル変数 UseLatestCommonDialogs をプログラムの先頭で false に設定します。これにより、従来の動作が強制されます。
  • VCL for the Web(IntraWeb)アプリケーションを実行およびデバッグするには、 Windows 2003 または Windows XP を使用する必要があります。Windows Vista を使用している場合は、VCL for the Web アプリケーションをデバッグする際に、ユーザー アカウント制御(UAC)をオフにする必要があります。IntraWeb(VCL for the Web コンポーネントのヘルプを含む)の詳細については、http://www.atozed.com/intraweb/docs/ を参照してください。
  • UAC が有効な Vista 上で、実行可能ファイル名に "setup"、"update"、または "install" が含まれる場合は、IDE が System Administrator アカウントで起動されていない限り、そのプログラムのデバッグはできません。IDE の外で、これらの文字列を含む実行可能ファイルを実行しようとすると、 "ユーザー アカウント制御" のダイアログが表示され、System Administrator アカウント用のパスワードの入力を求められます。IDE 内でデバッグなしで実行すると、このプログラムがより高い特権を必要とすることを示すエラーが表示されます。IDE 内でデバッグありで実行すると、プロセス作成エラーが発生します。詳細については、http://blogs.msdn.com/uac/archive/2006/01/13/512776.aspx を参照してください。

先頭へ

    コマンドラインに関する注意事項

  • MSBuild 実行可能ファイルを使用して、コマンドラインからプロジェクトをビルドできます。[スタート|プログラム|CodeGear RAD Studio|RAD Studio コマンドプロンプト] を選択すると、MSBuild 実行可能ファイルへのパスと本製品の環境変数が自動的に設定されます。MSBuild の使用方法の詳細については、オンライン ヘルプの [キーワード] または [目次] で MsBuild を検索してください。

先頭へ

    データベースに関する注意事項

    Delphi 2007 for Win32 用の dbExpress のアップグレード

Delphi 2007 for Win32 に付属の dbExpress を使用していて、Delphi 2007 for Win32 のコピーをアップグレードする場合は、ソース コードの変更は一切必要ありません。ただし、SQLExpr ユニットまたは DbxCommon ユニットを使用するコードはすべて再コンパイルする必要があります。この 2 つのユニットは、Delphi 2007 for Win32 の最初の出荷以降に変更されています。

    既知の問題

  • 新しい MySQL dbExpress ドライバ dbxmys30.dll は、5.0.xx サーバー インストールの LibMySQL.dll に対してテスト済みです。MySQL 4.0.xx に対して dbExpress を使用したい場合は、LibMySQL.dll を 5.0.xx バージョンにアップグレードするか、dbExpress に付属の dbxmysA30.dll ドライバを使用する必要があります。MySQL 用の最新の dbExpress ドライバと古いバージョンの LibMySQL.dll を一緒に使用すると、予期しない動作が発生する可能性があります。

  • libmysql.dll(4.x バージョン)を使用してデータ エクスプローラからテーブル ノードを展開しようとすると、次のエラーメッセージが表示されます。

    "Attempted to read or write protected memory."
    この問題を回避するには、LibMySQL.dll を 5.0.xx バージョンにアップグレードします。
  • 以下の組み合わせについては、テスト済みです。

    LibMySQL.dll (4.0.XX)DBXMysA30.dllMySQL 4.0.XX Server
    LibMySQL.dll (5.0.XX)DBXMys30.dllMySQL 4.0.XX Server
    LibMySQL.dll (5.0.XX)DBXMys30.dllMySQL 4.1.XX Server
    LibMySQL.dll (5.0.XX)DBXMys30.dllMySQL 5.0.XX Server
  • DBXMysA30 ドライバを使用したい場合は、DBXMys30.dll を DBXMys30.dll.bkup に名前変更して、DBXMysA30 を DBXMys30.dll に名前変更します。あるいは、DBXMysA30.dll を LibraryName として定義する新しいエントリを dbxdrivers.ini ファイルに追加します。

    新しい機能

    dbExpress 4 Framework

Delphi データベース ドライバ フレームワーク。これは、 Delphi で記述されたオブジェクト指向のドライバ フレームワークです。

デリゲート ドライバのサポート。デリゲート ドライバは、アプリケーションと実際のドライバの間に存在するドライバです。デリゲート ドライバを利用すると、dbExpress 4 Framework のすべてのパブリック メソッドとプロパティの前処理や後処理を実行できます。デリゲート ドライバは、接続プール、ドライバ プロファイリング、トレース、および監査に役立ちます。デリゲート ドライバは簡単に実装できます。詳細については、DBXCommon ユニットの先頭にあるソース文書を参照してください。

TDBXPool デリゲート ドライバ。任意の dbExpress ドライバに接続プールを提供します。

TDBXTrace デリゲート ドライバ。拡張トレース機能を提供します。トレースされたすべてのメソッドとプロパティに対する Delphi コードを生成します。

拡張可能なコマンド。独自の "コマンドタイプ" プロパティを指定することで、SQL 文またはストアド プロシージャではないコマンドをサポートできます。このプロパティは String です。これを利用して、ドライバやデリゲート ドライバの実装者は、カスタム コマンド固有のコマンド タイプ名前空間を導入できます。TDBXPool デリゲート ドライバからこの機能を利用して、"show pools" コマンドを実装できます。このコマンドは、リーダーとすべての接続プールの現在の状態情報を返します。

ソース コード文書。すべてのパブリック メソッド、プロパティ、およびイベントについてのヘルプ情報と連動しています。--doc Delphi コンパイラ スイッチを使用して、XML/HTML 文書を生成することもできます。

単一ソース。dbExpress 4 のソース コードは、Win32 プラットフォーム用と .NET プラットフォーム用のどちらにもコンパイルできます。

dbExpress 4 ソース コード。dbExpress 4 Framework 用の完全なソース コードが提供されています。

デュアル インターフェイス ドライバ。CodeGear dbExpress のすべてのドライバは、以前の dbExpress 3 と新しい dbExpress 4 の両方のインターフェイスを実装しています。

dbExpress 3 アダプタ ドライバ。dbxadapter30.dll DLL は、既存の dbExpress 3 ドライバ向けに dbExpress 4 インターフェイスを提供します。これを利用すると、アプリケーションは、以前の CodeGear 以外の dbExpress 3 ドライバを dbExpress 4 で使い続けることができます。

サンプル
  • CTS。dbExpress 4 Framework 用の Certification Test Suite。これは、ドライバ準拠のテスト スイートで、 dbExpress 4 Framework を直接使用する適切な例を提供しています。
  • Delegates。これは、TDBXTrace や TDBXPool などのドライバ デリゲートの実装が簡単に使用できることと、その強力な機能を示しています。

    単一ソースの dbExpress VCL コンポーネント

コード ベースが統一されて、読み取り、デバッグ、保守が容易になりました。

新しい dbExpress 4 Framework を使用して、VCL から dbExpress データベース ドライバにアクセスできるようになりました。

    新しいデータベース ドライバ

  • MySQL 4.1 および 5.0
  • InterBase 2007

    新しい Unicode 対応データベース ドライバ

  • MySQL 4.1 および 5.0
  • InterBase 2007
  • Oracle
MS-SQL 用の Unicode サポートは、既に本製品に組み込まれています。

    Oracle 用の Unicode dbExpress ドライバと ANSI dbExpress ドライバ

Unicode ドライバと ANSI ドライバの両方が dbExpress に同梱されています。Unicode 版は dbxoraW30.dll、ANSI 版は dbxora30.dll です。

    データベースの変更に関する注意事項

    dbExpress 2.5 の非サポート

dbExpress 2.5 は、このリリースではサポートされなくなりました。

    新しい MySQL dbExpress ドライバ

新しい MySQL ドライバは dbxmys30.dll という名前です。このドライバは Unicode 文字列をサポートしています。このドライバは、MySQL 4.1 および 5.0 サーバー用のバージョンの MySQL の libmysql.dll でのみ動作します。dbxmys30.dll は、それより古いバージョンの libmysql.dll では動作しません。

古いバージョンの MySQL ドライバも本製品に含まれていますが、その名前は dbxmysA30.dll に変更されています。この古いドライバは、Unicode ではなく ASCII 文字列のみをサポートすることを表すために、DLL 名に "A" が付加されています。dbxmysA30.dll は、MySQL サーバーのバージョン 4.0 以前をサポートするバージョンの MySQL の libmysql.dll とのみ使用できます。

     デリゲート ドライバ

次の 2 つのデリゲート ドライバが提供されています。
  • DBXTrace
  • DBXPool

    dbExpress VCL コンポーネント

ほとんどのアプリケーションは、dbExpress VCL の変更の影響を受けません。ただし、削除されたり、同じ機能を持つものと差し替えられたメソッド、プロパティ、イベント、定数、および列挙がいくつかあります。これらの変更は、次のような理由から必要になりました。
  • dbExpress 3 が使用していた C 言語風の COM インターフェイスの代わりに、Delphi 風の dbExpress 4 Framework を使用するようになったこと。
  • dbExpress VCL コンポーネントが単一ソースになったこと。ネイティブ バージョンの dbExpress VCL コンポーネントと .NET バージョンの dbExpress VCL コンポーネントの間で、上位レベルの互換性が保たれるようになりました。
    互換性に関する既知の問題
  • dbExpress ユニットが推奨されなくなり、空になったため、不要になりました。このユニットの内容のほとんどは、DBXCommon ユニットまたは SQLExpr ユニットに移動しました。
  • 事実上、dbExpress ユニット内にあったすべてのクラス、インターフェイス、列挙、定数は、削除、名前変更、または置換されました。名前変更または置換されたアイテムは、DBXCommon ユニットまたは SQLExpr ユニットのインターフェイス セクションにあります。
  • 静的なドライバ ライブラリは、サポートされなくなりました。これらの静的ライブラリを Delphi ユニットにリンクすることで、ネイティブ ドライバを Delphi の実行可能ファイルにリンクできましたが、これらはサポートされなくなりました。このような Delphi ユニットには、DBExpasa、DBExpDB2、DBExpInf、DBExpINT、DBExpMSS、DBExpMYS、DBExpMySQL、DBExpORA、および DBExpt があります。

    Win32 プラットフォーム向けの dbExpress アプリケーションの配布

    パッケージの使用

[プロジェクト|オプション|パッケージ] の [実行時パッケージを使って構築] オプションをオンにする必要があります。DbxCommonDriver100.bpl をアプリケーションと一緒に配布する必要があります。以前のリリースと同様に、アプリケーションがいずれかの DBX*.dll DLL dbExpress ドライバを使用する場合は、それらも配布する必要があります。

    ユニット インターフェイスの互換性

ほとんどの部分について、本製品のユニット インターフェイスは BDS2006 との互換性を維持しています。ただし、dbExpress VCL の SQLExpr、DBXpress、SQLConst の 3 つのユニットでは互換性が維持されていません。SQLExpr だけがコンポーネントを含んでいます。DBXpress は推奨されていません。BDS2006 バージョンの dbExpress100.bpl との競合を避けるために、dbExpress100.bpl は一時的に dbExpress4100.bpl に名前変更されています。"4" は、このバージョンの dbExpress パッケージが、バージョン 4 の dbExpress ドライバ用であるとを示しています。バージョン 11.0 の VCL の出荷時には、通常の VCL の命名規約が再開されて、dbExpress4100.bpl は dbExpress110.bpl という名前に変更されます。

    サポート対象サーバー

    dbExpress

  • InterBase 7.5.1、2007、6.5*、7.0*、7.1*(すべて)(ドライバ dbxINT30.dll、クライアント GDS32.DLL)
  • Oracle 10g、9.1.0*、9.2.0*(Ent)(ドライバ dbxora30.dll、ドライバ dbxoraW30.dll、クライアント OCI.DLL)
  • DB2 UDB 8.x、7.x*(Ent)(ドライバ dbxDB230.dll、クライアント db2cli.dll)
  • MSSQL 2000、2005(Ent)(ドライバ dbxMSS30.dll、クライアント oledb.dll)
  • Informix 9.x (Ent)(ドライバ dbxINF30.dll、クライアント isqlb09a.dll)
  • Adaptive Sybase Anywhere 9, 8*(Ent)(ドライバ dbxASA30.dll、クライアント dbodbc9.dll)
  • Sybase 12.5(Ent)(ドライバ dbxASE30.dll、クライアント libct.dll および libcs.dll)
  • MySQL 5.0.27, 4.1.22* (すべて)(ドライバ dbxMYS30.dll、クライアント libmysql.dll)
  • MySQL 4.0.24(すべて)(ドライバ dbxMYSA30.dll、クライアント libmysql.dll)
  • メモ: Delphi2006 の dbxMYS30.dll から変更はありません。名前が変更されました。

* このバージョンのデータベースでは、ドライバの動作が完全に保証されていません。

先頭へ

    デバッガに関する注意事項

  • コード内にデータ ブレークポイントを置こうとすると、プログラムが破損する場合があります。たとえば、VMT スロットにデータ ブレークポイントを置くと、プログラムが間違った場所にジャンプする場合があります(アドレスの "最後の" バイトが 0xcc に上書きされる)。
  • System Mechanic 7 Pro をインストールすると、統合デバッガの機能が無効になります。イベント ログ ビューでのプロセスおよび診断メッセージがただちに終了するという動作が報告されています。この製品がインストールされている場合は、サービス マネージャを使用して "iolo DMV Service" の実行を無効にすることで、デバッグ機能を復元できます。

先頭へ

    マニュアルに関する注意事項

  • パッケージ エラーが発生し、IDE のオンライン ヘルプが機能しない場合は、.NET 2.0 Framework SDK のインストールが不完全であることが原因の可能性があります。本製品で使用されるヘルプ ビューアは .NET 2.0 Framework SDK に含まれています。.NET Framework が明らかにインストールされている場合は、利用可能な 3 つのオプション(Product Documentation を含む)をすべてオンにする必要があります。

    この問題を解決するには、以下を実行します。
    1. C:\Program Files\Microsoft.NET\SDK にある .NET Framework SDK をアンインストールします。
    2. 本製品をアンインストールします。
    3. システムを再起動します。
    4. 本製品を再インストールします。この手順によって、すべての必要なソフトウェアとともに .NET 2.0 Framework SDK もインストールされます。
  • ヘルプを表示するために F1 を押すと、最初に、オンライン ヘルプを第 1 のソースとして使用するか、ローカルのヘルプを第 1 のソースとして使用するか、オンライン ヘルプをまったく使用しないかを選択するダイアログが表示されます。適切なヘルプ ファイルを参照できるようにするには、第 2 のオプションである [最初にローカル、次にオンラインで実行] を選択します。

先頭へ

    国際化に関する注意事項

  • プロジェクト パスに英語以外の文字を含むソース ファイル名が含まれていると、ブレーク ポイントは認識されず、"無効" とマークされます。
  • IME (input method editor)を使用している場合に、 .NET Framework のバグが原因で本製品がハングアップし、しばらくした(約 5 分)後にエラー メッセージが表示される場合があります。このエラーは、数回発生すると、発生しなくなるようです。すべての言語ウィンドウが影響を受ける可能性があります。

    このエラーを防ぐには、次のレジストリ エントリを作成または更新してください。

    HKEY_CURRENT_USER\Console\LoadConIme

    このエントリの種類は REG_DWORD で、値は 0 に設定する必要があります。

先頭へ

    Together に関する注意事項

  • C++Builder 2007 では、統合モデリング ツール Together は、読み取り専用のモデリング(コードのビジュアル化)のみをサポートしており、コード生成はサポートしていません。Delphi 2007 for Win32 では、Together は、オンライン ヘルプで説明されているすべてのモデリング機能をサポートしています。
  • C++ プロジェクトに対して Together コードのビジュアル化が動作しない場合は、プロジェクト マネージャを使用して、プロジェクトにヘッダー ファイル(.h または .hpp)を追加してください。これによって、Together モデリング ツールで情報が利用できるようになります。
  • プロジェクトから Together サポートを削除した後で、プロジェクト マネージャからダイアグラム サポート ファイルを削除することはできません。これらのファイルを削除するには、IDE のメイン メニューで [プロジェクト|プロジェクトから削除...] を選択します。ダイアグラム サポート ファイルのリストが表示されます。複数のファイルを選択して削除できます。
  • モデリング サポートが無効になっている場合に Together リファクタリングを選択すると、プロジェクトでモデリング サポートを有効にするかどうかを確認するメッセージが表示されます。Together リファクタリングを使用するには、このメッセージに "はい" と答える必要があります。

先頭へ

    VCL/RTL に関する注意事項

  • Windows Vista 用に次の 3 つの VCL ダイアログが追加されました。
    • TCustomFileOpenDialog
    • TCustomFileSaveDialog
    • TTaskDialog
    これらのコンポーネントはすべて、Windows Vista ダイアログのラッパーです。また、グローバル変数 UseLatestCommonDialogs が true に設定されている場合、Vista システムでは自動的に Vista のダイアログが使用されます。
  • TApplication クラスに、MainFormOnTaskBar という新しいプロパティが追加されました。このプロパティのデフォルト値は、新規アプリケーションの場合は True に、既存アプリケーションの場合は False に設定されます。このプロパティは、VCL による Windows タスクバー ボタンの扱い方を制御します。このプロパティを古いアプリケーションに適用することもできます。ただし、MainForm の Z オーダーに影響を与えるので、従来の動作に影響がないことを確認する必要があります。MainFormOnTaskBar は、アプリケーションの起動時に設定され、アプリケーションの実行中は存続するように設計されています。アプリケーションの実行中にこのプロパティを変更すると、予期しない動作が生じる可能性があります。この変更を行った主な理由は、Windows Vista で利用可能ないくつかの新機能をサポートするためです。

先頭へ

    SOAP サーバー

Delphi SOAP Server アプリケーションと Web App Debugger クラスの組み合わせは、そのままではコンパイルできません。この問題に対しては、次の 2 つの回避策があります。

  • ライプラリ パスに $(BDS)\Lib\Indy9 を含め、代わりに $(BDS)\Lib\Indy10 を削除します。ただし、これは、アプリケーションが Indy 9 を使用する必要があることを意味します。
  • IndySockTransport と sockapp をコンパイルし、それを $(BDS)\Lib\Indy10 に置きます。

先頭へ

Copyright 2007 CodeGear Software. All rights reserved.




Server Response from: ETNASC04