2011年9月30日

Firebird 2.5.1リリース

Firebird Ver2.5.1がリリースされています。

Firebird: Firebird 2.5.1
Firebird 2.5 Release Notes (PDF)

元ねたはFirebird News » Firebird 2.5.1 is released

2011/10/04追記: 正式にアナウンスされています。どうやらフライングだったようですね。

Firebird: Firebird 2.5.1 (sub-release) is available
Firebird News » Firebird 2.5.1 is released

2011年9月29日

デバッガビジュアライザ

Delphi 2010以降のIDEにはデバッガビジュアライザという機能が追加されています。これは従来デバッガ上の値の評価時に適切に表示できなかったいくつかのデータ型(TDateTime/TStringList/std::string/std::wstring)の値をわかりやすい形式で表示させるもので、詳細についてはプロダクトマーケティングマネージャのTim Del ChiaroさんJED SoftwareJeremy Northさん

Delphi 2010 Feature Highlight - Debugger Visualizers

で解説しています(オリジナルの記事はBlaise Pascal Magazine Special Issueに掲載されています)。この記事にあるようにデバッガビジュアライザはIDE Expert(.bpl)としてユーザが任意に作成することができます。

標準以外のデバッガビジュアライザの実装ですが、ITDevCon 2009でのMitov SoftwareのBoian MitovさんによるTBitmapのビジュアライザのデモンストレーションについて、エンバカデロのシニアソフトウェアコンサルタントでヨーロッパ地域担当Delphi/RAD StudioリードテクニカルエバンジェリストのPawel Glowackiさん

Paweł Głowacki : Boian’s TBitmap Visualizer and converting to grayscale

で紹介しています。

また標準のTStringListのビジュアライザにはデータが4096文字で切り捨てられたり処理が遅いなどの問題があり、これを置き換えるビジュアライザをUwe Schusterさんが作成しています。

TStringList Visualizer revised (2010, XE, XE2) | Uwe's Delphi blog

さらに各種形式のグラフィック(BMP/JPEG/GIF/PNG/ICO/WMF/EMF/TIFF/WMP)に対応するビジュアライザとしてCodeCentralにahmoy lawさん(CnPack関係の人でしょうか)によるImage Visualizerもアップロードされています。

27674 Image Visualizer 1.10 for Delphi

2011/09/30追記: benokさんからEDNのDelphi 2010 Feature Highlight - Debugger Visualizersの著者はJeremy Northさんだという指摘がありましたので訂正しました。ご指摘ありがとうございます。

2011年9月28日

Delphi/C++Builder XE2 Update 1

Delphi/C++Builder XE2のUpdate 1がリリースされています。

28508 RAD Studio XE2 Update 1
28509 Delphi XE2 Update 1
28510 C++Builder XE2 Update 1
28477 Delphi XE2 and C++Builder XE2 ISO (includes Update 1)
Delphi XE2 および C++Builder XE2 の重要な製品アップデート
Delphi XE2/C++Builder XE2 Update 1 における不具合修正リスト (en)

XE2 RTM版にはFireMonkey 3DにGLScene(MPL)のコードが含まれていることがライセンス上問題であるという指摘があり、Update 1ではGLScene由来のコードが排除されています。このため一旦XE2 RTMをアンインストールし、ダウンロードキャッシュ(通常は"%USERPROFILE%\Documents\Rad_Studio_XE2_Downloads"に保存されています)も完全に削除した上でUpdate 1をインストールする必要があるとのことです。詳細については

XE2 Update 1 をインストールしてください - XE2 のリリース ノート - RAD Studio XE2 (en)

に説明があります(日本語版はまだ準備中)

2011/10/04追記: 日本語版のリリースノートにUpdate 1に関する記述が追加されたのでリンクを追加しました。

2011年9月22日

Delphi XE2で生成される実行ファイルのバージョン情報についての問題とその解決策

というわけで、Delphi XE2では実行ファイルにバージョン情報がうまく設定されない、という問題があるようです。

Embarcadero Discussion Forums: XE2で、バージョンリソースの作成に問題があるようです
バージョン情報の問題 - au2010の日記

そこでまずVCLフォームアプリケーションを作成し、プロジェクトオプションのバージョン情報でターゲットを"すべての構成 - すべてのプラットフォーム"を選択しておいて、バージョン情報を設定します。これでプログラムをビルドしてProject1.exeのバージョン情報を見てみます。…ファイルバージョンが1.0.0.0、言語が英語(米国)(0x0409)、製品バージョンが1.0.0.0となり、これ以外の情報は反映されていません。どういうことでしょう?そこでProject1.dprojの内容を見てみます。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{AAD95BEF-E352-48D7-8BA1-FBC01F8BEC0D}</ProjectGuid>
<ProjectVersion>13.4</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>Project1.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_UsePackage>bindcompfmx;fmx;rtl;dbrtl;IndySystem;DbxClientDriver;bindcomp;inetdb;DBXInterBaseDriver;xmlrtl;DbxCommonDriver;IndyProtocols;DBXMySQLDriver;dbxcds;soaprtl;bindengine;dsnap;IndyCore;fmxase;inet;fmxobj;inetdbxpress;fmxdae;dbexpress;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_Build>4</VerInfo_Build>
<Manifest_File>None</Manifest_File>
<VerInfo_Keys>CompanyName=Owl's Perspective;FileDescription=プログラムの説明;FileVersion=1.2.3.4;InternalName=Project1.exe;LegalCopyright=;LegalTrademarks=Copyright 2011 Owl's Perspective. All rights reserved.;OriginalFilename=Project1.exe;ProductName=Project1;ProductVersion=2.3;Comments=コメント</VerInfo_Keys>
<Icon_MainIcon>c:\program files\embarcadero\rad studio\9.0\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_MinorVer>2</VerInfo_MinorVer>
<VerInfo_Release>3</VerInfo_Release>
<VerInfo_Locale>1041</VerInfo_Locale>
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>AppBar230;vclimg;vclactnband;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;websnap;VclSmp;vcl;dsnapcon;vclx;webdsnap;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>vcldbx;frx16;TeeDB;vclib;inetdbbde;Tee;AppBar230;svnui;ibxpress;vclimg;TtsAudgr230;frxDB16;intrawebdb_120_160;fmi;fs16;vclactnband;FMXTee;TeeUI;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;Intraweb_120_160;websnap;vclribbon;frxe16;VclSmp;fsDB16;vcl;CloudService;CodeSiteExpressPkg;FmxTeeUI;dsnapcon;vclx;webdsnap;svn;bdertl;adortl;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="Unit1.pas">
<Form>Form1</Form>
<FormType>dfm</FormType>
</DCCReference>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Delphi.Personality>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1041</VersionInfo>
<VersionInfo Name="CodePage">932</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">Project1.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k160.bpl">Microsoft Office 2000 オートメーション サーバー ラッパー コンポーネントのサンプル</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp160.bpl">Microsoft Office XP オートメーション サーバー ラッパー コンポーネントのサンプル</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment/>
<Platforms>
<Platform value="Win64">False</Platform>
<Platform value="Win32">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
</Project>

これをよく見ると気になる点が2つあります。
  1. ターゲット"すべての構成 - すべてのプラットフォーム"に相当する<PropertyGroup Condition="'$(Base)'!=''">の部分にバージョン情報であるVerInfo_KeyとVerInfo_Localeがあるのに、個別のターゲットに相当する<PropertyGroup Condition="'$(Base_Win32)'!=''">などにも設定した覚えのないバージョン情報が入っている。
  2. Delphi XEまで使用していた<Delphi.Personality>の<VersionInfo>、<VersionInfoKeys>が無視されている。
個別のターゲットの部分に設定していない情報が入っていることに関しては、プロジェクトオプションダイアログのバージョン情報ページでターゲットを変更すると表示されるものや実際に生成される実行ファイルのバージョン情報と一致していますね。ということで個別のターゲットの部分に入っているVerInfo_KeyとVerInfo_Localeを削除します(プロジェクトを閉じた状態でProject1.dprojを書き換えます)。


<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{AAD95BEF-E352-48D7-8BA1-FBC01F8BEC0D}</ProjectGuid>
<ProjectVersion>13.4</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>Project1.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_UsePackage>bindcompfmx;fmx;rtl;dbrtl;IndySystem;DbxClientDriver;bindcomp;inetdb;DBXInterBaseDriver;xmlrtl;DbxCommonDriver;IndyProtocols;DBXMySQLDriver;dbxcds;soaprtl;bindengine;dsnap;IndyCore;fmxase;inet;fmxobj;inetdbxpress;fmxdae;dbexpress;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_Build>4</VerInfo_Build>
<Manifest_File>None</Manifest_File>
<VerInfo_Keys>CompanyName=Owl's Perspective;FileDescription=プログラムの説明;FileVersion=1.2.3.4;InternalName=Project1.exe;LegalCopyright=;LegalTrademarks=Copyright 2011 Owl's Perspective. All rights reserved.;OriginalFilename=Project1.exe;ProductName=Project1;ProductVersion=2.3;Comments=コメント</VerInfo_Keys>
<Icon_MainIcon>c:\program files\embarcadero\rad studio\9.0\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_MinorVer>2</VerInfo_MinorVer>
<VerInfo_Release>3</VerInfo_Release>
<VerInfo_Locale>1041</VerInfo_Locale>
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>AppBar230;vclimg;vclactnband;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;websnap;VclSmp;vcl;dsnapcon;vclx;webdsnap;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>vcldbx;frx16;TeeDB;vclib;inetdbbde;Tee;AppBar230;svnui;ibxpress;vclimg;TtsAudgr230;frxDB16;intrawebdb_120_160;fmi;fs16;vclactnband;FMXTee;TeeUI;vcldb;bindcompvcl;vcldsnap;vclie;vcltouch;Intraweb_120_160;websnap;vclribbon;frxe16;VclSmp;fsDB16;vcl;CloudService;CodeSiteExpressPkg;FmxTeeUI;dsnapcon;vclx;webdsnap;svn;bdertl;adortl;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="Unit1.pas">
<Form>Form1</Form>
<FormType>dfm</FormType>
</DCCReference>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Delphi.Personality>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1041</VersionInfo>
<VersionInfo Name="CodePage">932</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">Project1.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k160.bpl">Microsoft Office 2000 オートメーション サーバー ラッパー コンポーネントのサンプル</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp160.bpl">Microsoft Office XP オートメーション サーバー ラッパー コンポーネントのサンプル</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment/>
<Platforms>
<Platform value="Win64">False</Platform>
<Platform value="Win32">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
</Project>

これでプロジェクトを開きなおしてコンパイルしてみましょう。今度は設定したバージョン情報が正しく格納されていますね。ということでこの問題はXE2でバージョン情報の設定をターゲット毎に設定できるように仕様を変更したことによる不具合だと考えられます。また直接dprojファイルの不要な部分を削除することで回避できる、ということになります。

参考: DEKOさんのところの11/09/22 バージョン情報の件 (XE2) 11/09/22 バージョン情報の件 (XE2)。構成毎の設定が必要な場合について解説されています。

2011年9月21日

Delphi/C++Builder XE2におけるパッケージ作成時の注意点

Delphi/C++Builder XE2でパッケージを作るときに注意すると幸せになれるかもしれないけれどもあんまり参考にならないポイントを3つほど。
  • 出力ディレクトリ
    "プロジェクトオプション"の"Delphiコンパイラ"ページで"ユニットの出力ディレクトリ"を変更してもコンパイル時にデフォルトの出力ディレクトリ([WIN32][WIN64]\[DEBUG][RELEASE])が作成されてしまいます。これは.dprojファイル(xml形式)のDCC_ExeOutputにデフォルトのDCC_DcuOutputの内容が残っているためで、これをDCC_DcuOutputと同じ内容に書き換えることで回避することができます。
  • デザインパッケージ
    設計時パッケージでコンポーネントのプロパティエディタなどを作成した場合、デザインパッケージ"DesignIDE"が必要になりますが、単純にRequiresに追加してしまうとx64にはDesignIDEが存在しないためにx64版のコンパイルでエラーになってしまいます。この場合は"プロジェクトオプション"のターゲットで"すべての構成 - 32ビット Windows プラットフォーム"を選択し、"Delphiコンパイラ"の"コンパイル"ページの"コンパイラに渡す追加オプション"に"-LUDesignIDE"を追加することで回避することができます。
  • バージョン情報
    プロジェクトオプションでバージョン情報を追加してもターゲット構成(WIN32/WIN64/OS X/Debug/Release)毎にデフォルトの指定が残ってしまい、パッケージに正しいバージョン情報をつけることができません(もちろん全てのプロファイルに同じ内容を設定すればよいのですが)。これは.dprojファイルの構成毎の設定のところに不適切なVerInfo_LocaleとVerInfo_Keysの値が入ってしまっているためで、ベース構成以外のVerInfo_LocaleとVerInfo_Keysの要素を削除することで回避することができます。

ちなみに.dprojファイルのバージョン情報に関する設定の格納方法がXE2で変更になったようで、従来は"\Project\ProjectExtensions\BorlandProject\Delphi.Personality"のVersionInfoとVersionInfoKeysにバージョン情報の設定が存在しますが、XE2ではこの位置にある設定を無視して"\Project\PropertyGroup"のベース構成(CONDITION="'$(Base)'!=''")のVerInfo_*を使用するようです。XE2でバージョン情報関係の不具合が報告されているようですが、これらの仕様変更と関係があるような気がします(次回に続く)。

InterBase XE Update 3リリース

InterBase XE Update 3がリリースされています。バージョンは10.0.3.566となっています。

InterBase XE Update 3 Readme (日本語)
InterBase XE Update 3 Readme
Team Japan » InterBase XE Update 3 (10.0.3.566) の日本語版
InterBase XE Update 3 での IBCosole の機能強化
IBConsole enhancements in InterBase XE Update 3

28531 InterBase XE 32-bit Update 3 (10.0.3.566) for Windows, Japanese
28490 InterBase XE 32-bit Update 3 (10.0.3.566) for Windows, English
28532 InterBase XE 64-bit Update 3 (10.0.3.566) for Windows, Japanese
28491 InterBase XE 64-bit Update 3 (10.0.3.566) for Windows, English
28493 InterBase XE Update 3 (10.0.3.566) 32-bit ToGo Edition, Windows, English
28495 InterBase XE Update 3 (10.0.3.566) 64-bit ToGo Edition, Windows, English
28533 InterBase XE Update 3 (10.0.3.566) for Linux, Japanese
28500 InterBase XE Update 3 (10.0.3.566) for Linux, English
28501 InterBase XE Update 3 (10.0.3.566) for Mac OS X, English

28529 InterBase XE (10.0.3.566) 32-bit Developer Edition for Windows, Japanese
28502 InterBase XE (10.0.3.566) 32-bit Developer Edition for Windows, English
28527 InterBase XE (10.0.3.566) 64-bit Developer Edition for Windows, Japanese
28503 InterBase XE (10.0.3.566) 64-bit Developer Edition for Windows, English
28535 InterBase XE (10.0.3.566) 32-bit Developer Edition, Linux, Japanese
28504 InterBase XE (10.0.3.566) 32-bit Developer Edition, Linux, English
28505 InterBase XE (10.0.3.566) 32-bit Developer Edition, Mac OS X, English

2011/10/08追記: 日本語版のUpdate 3がリリースされたのでリンクを追加しました。

2011/10/09追記: Team Japanのアーティクルのリンクを追加しました。

2011/10/18追記: "IBConsole enhancements in InterBase XE Update 3"のリンクを追加しました。

2011/11/14追記: "InterBase XE Update 3 での IBCosole の機能強化"のリンクを追加しました。

2011年9月20日

TStopwatchその2

時間がだいぶ経ってしまったのですが、TStopwatchに関するアーティクル
経過時間を示すElapsed/ElapsedMilliseconds/ElapsedTicksプロパティはStopメソッドで停止した状態でないと更新された値を取得できない。
という記述について、山本さんほかから停止状態じゃなくても正しい値が取れるのでは?(意訳)という指摘がありました。そこでDelphi 2010/XE/XE2で実装を確認してみましたが、確かにどのバージョンでも停止状態になくても特に問題なく正しい値を取得できるようです。またDiagnostics.TStopWatchの元ねたである本家.NET FrameworkのSystem.Diagnostics.Stopwatch.Elapsedでもやはり状態に関わらず適切な値を取得できるという記述になっています。ということでElapsed/ElapsedMilliseconds/ElapsedTicksプロパティは動作状態にかかわらず正しい値を取得できる(=ヘルプの記述が正しくない)、と考えてよさそうです。ではこのヘルプの記述(わざわざ注記してある内容が正しくない)はどこからきたのでしょう?いろいろ調べてみると、これはどうもdelphi.about.comのZarko Gajicさんの

High Performance Timer in Delphi - TStopWatch - High-Resolution Counter

という記事にある実装がDelphiにおけるTStopWatchの最初のもので、この実装では停止状態でしか正しい値を取得できないことに由来するのではないかと思われます。その後(おそらくVCLに取り込まれた後に).NET FrameworkのSystem.Diagnosticsに合わせて停止状態でも正しい値が取得できるように仕様が変更されたときにヘルプを修正し忘れた、ということではないでしょうか。

ということで大変遅くなりましたが元記事のほうも記述を修正しておきました。山本さんほか指摘していただいた方(確か全力わはーの中の人がtweetしてたような…?違ったらすいません)、2ちゃんねるでツッコミいれてくれた方、ありがとうございます。

2011年9月19日

RAD Studio/Delphi XE2ユーザ向Delphi Developer Certification無償キャンペーン

RAD Studio/Delphi XE2ユーザ向のDelphi Developer Certificationの無償キャンペーンが行われています。

Delphi Insider: Free Certification Test for Delphi XE2 and RAD Studio XE2 Users
Limited Time Special

2011/09/30までに新規購入かアップグレードを行い、2011/10/15までにプロモーションページで登録することで、無料でDelphi Developer Certificationを受けることができます。受験は登録から90日以内となっています。

また前回のキャンペーンによる受験は2011/07/31登録でも2011/10/29が期限になります。期限切れに注意しましょう。

2011年9月16日

プログラミングの魔導書Vol.2 予約受付開始

プログラミングの魔導書 ~Programmers' Grimoire~ Vol.2の発売がアナウンスされています。Vol.1の発売から早一年、ひょっとして一発で終わってしまったのかと心配していましたが、無事にVol.2の予約の受付が始まったようです。

株式会社ロングゲート - 製品案内

お知らせ

受注生産の形態をとっているため、書籍版に関しては予約でのご注文のみとなりますのでご注意ください。

PDF版は予約期間が過ぎた後でもご購入いただけます。

予約期間は2011/10/04(火)までです。

Gmailでは、ダウンロード開始メールが迷惑メールフォルダに格納されてしまう場合があります。PDF版を購入し、ダウンロード開始メールが届かない場合、そちらをご確認ください。

元ねたは『プログラミングの魔導書 Vol.2』予約開始! - Faith and Brave - C++で遊ぼう本の虫: プログラミングの魔導書 Vol.2の予約受付中

2011年9月14日

Microsoft Monthly Update 2011/09

今日はMicrosoftのセキュリティアップデートの日です。
MS11-070
MS11-071
MS11-072
MS11-073
MS11-074

2011年9月11日

[書籍]プログラミングの心理学 25周年記念版

ジュンク堂書店 新宿店The Psychology of Computer Programming: Silver Anniversary Editionの翻訳(新訳)である

プログラミングの心理学 【25周年記念版】 (amazon)/Gerald M. Weinberg著/伊豆原弓訳/日経BP/ISBN 978-4-8222-8470-1/2,730円

を購入。さすがに内容は古いですね。PL/IとかCOBOLなんて聞いたこともない人にはお勧めしません。それくらいなら同じWeinberg先生のライト,ついてますか (amazon)をお勧めします。

2011年9月6日

第20回エンバカデロ・デベロッパーキャンプ開催

本日(2011/09/06)の10:00からデベロッパーキャンプが行われます。David Iさんも一昨日の夜に来日しています。

David I、デベロッパーキャンプ参加に向け来日

会場は秋葉原UDXの4Fです。

Team Japan » 第20回 エンバカデロ・デベロッパーキャンプ - 会場へのアクセス

こちらは残念なお知らせです。

第20回エンバカデロ デベロッパーキャンプで喋れなくなりました。 - C++Builder好きの秘密基地

この枠はどうなるのかな?高橋さんのDBXのセッションのみになる模様です。

会場到着。あと10分で開始です。

10時です。始まりました。今日はUStream中継もあるようです(全てではないG/AセッションのみでBはなしの模様)。

懇親会ただの飲み会を含め、無事終了。参加者のみなさん、スピーカのみなさん、関係者のみなさん、おつかれさまでした。David Iさんほか明日神戸に行かれる方々はお気をつけて。ちなみに次回の開催日程はまだ未定だそうです(年内はないんですか?って聞いてみたけど、う~ん、という反応でした)。

2011/09/15追記: セッション資料がダウンロードできるようになっています。

第20回 エンバカデロ・デベロッパーキャンプ - セッション資料ダウンロード

2011/11/30-2011/12/06追記: David IさんのA5 Delphi/C++Builderテクニカルセッション 「RAD Studio XE2によるクロスプラットフォーム開発」のリプレイビデオが公開されています。日本語字幕入りです。

ビデオ - 第20回 エンバカデロ・デベロッパーキャンプ 「RAD Studio XE2 によるクロスプラットフォーム開発」
「RAD Studio XE2によるクロスプラットフォーム開発」 1/5 - YouTube
「RAD Studio XE2によるクロスプラットフォーム開発」 2/5 - YouTube
「RAD Studio XE2によるクロスプラットフォーム開発」 3/5 - YouTube
「RAD Studio XE2によるクロスプラットフォーム開発」 4/5 - YouTube
「RAD Studio XE2によるクロスプラットフォーム開発」 5/5 - YouTube

2011年9月5日

ISO/IEC 14882:2011 (C++ 2011)発行

C++0xことC++2011がついにISO/IEC 14882:2011として発行されました。

ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++

あとはC++Builder XE3でC++2011がどれだけサポートされるか、でしょうかね。

元ねたはC++11が正式に発行されました - Faith and Brave - C++で遊ぼう

2011年9月3日

DDevExtensions 2.5リリース

Andreas HausladenさんDDevExtensionsがアップデートされてVersion 2.5になっています。Delphi XE2のサポートなどが追加されています。

DDevExtensions 2.5 with XE2 support | Andy’s Blog and Tools

2011年9月2日

Oxygene for Java

Project "Cooper"ことOxygene for Javaについての続報です。

Oxygene for .NET = Embarcadero Prism XE2 « RemObjects Blogs

RemObjects Oxygene 5はOxygene for .NETとOxygene for Javaで構成されており、このうちOxygene for .NETは(Embarcadero) Prism XE2 Professionalとして(Oxygeneとしては)単体で販売され、一方でOxygene for JavaはOxygene 5(599USD)あるいはOxygene for Java(399USD)単体でRemObjectsから発売予定(現時点でpre-order)、ということです。

2011/09/07追記: RemObjectsからOxygene 5が正式にアナウンスされています。

Announcing Oxygene 5 for .NET and Java « RemObjects Blogs

2011年9月1日

RAD Studio/Delphi/C++Builder/Prism/RadPHP XE2リリース

RAD Studio/Delphi/C++Builder/Prism/RadPHP XE2が正式にリリースとなったようです。トライアル版は既にダウンロード可能になっています。

Windows、Mac、Web、モバイル開発に対応したRAD Studio XE2登場!
エンバカデロ、開発ツール「RAD Studio XE2」とコンポーネント4製品を発売 - ニュース:ITpro

Delphi XE2 および C++Builder XE2 で修正された不具合一覧

2011/09/02追記: IPIndyImpl.dcp(Win64/OS X)とinetdbexpress.dcp(Win64/Release)が不足しているという問題(RAID287274)に対するhotfixがリリースされています。

28484 IPIndyImpl.dcp and inetdbxpress.dcp for Delphi XE2

2011/09/03追記: プロダクトマーケティングマネージャのTim Del ChiaroさんによるXE2のダウンロード関係のリンクのまとめです。

Delphi Insider: Download links for Delphi XE2, C++Builder XE2, RAD Studio XE2, Embarcadero Prism XE2 and RadPHP XE2

2011/10/04追記: Delphi/C++Builder XE2で修正された不具合一覧のリンクを追加しました。

RAD Studio/Delphi/C++Builder/Prism/RadPHP XE2リリース間近

いよいよRAD Studio/Delphi/C++Builder/Prism/RadPHP XE2のリリースが迫っているようです。とりあえずプレスリリース、インストール/リリースノートなどのリンクを。

プレスリリース: エンバカデロ、Delphi / C++Builder / RAD Studioの新バージョン 「XE2」によりビジネスアプリケーション開発を変革



過去のバージョンのライセンスの件については、

以前の製品バージョンのインストール

ライセンスには次に示す以前の製品バージョンが含まれ、それらをダウンロードして使用できます。

  • Delphi XE2 は、Delphi XE、2010、2009、2007 および 7 の各ライセンスを含みます。
  • C++Builder XE2 は C++Builder XE、2010、2009、2007 および 6 の各ライセンスを含みます。
  • RAD Studio XE2 は、Delphi および C++Builder の全バージョンのライセンスを含みます。

個人指名ユーザー ライセンスまたは複数の指名ユーザー ライセンス(5 ユーザー パックまたは 10 ユーザー パック)を購入した場合:

XE2 製品をインストールし、登録した後に、「以前のバージョン」にアクセスして、古いバージョンの Serial Number とソフトウェア(ダウンロード)を入手できます。XE2 製品の購入後 180 日以内に、このページから、古いバージョンのライセンスを要求する必要があります。

XE2 製品に対して、ネットワーク指名ユーザー ライセンス、AppWave 指名ユーザー ライセンス、または同時使用ライセンスを購入した場合:

ユーザーのネットワーク ライセンス証明書に、Delphi 7 や C++Builder 6 の個人 Serial Number を含め、2007 から XE の各バージョンでライセンス処理に使用するスイート ライセンスが含まれます。Delphi 7 および C++Builder 6 の Serial Number は、単一の指名ユーザー Serial Number です。ユーザー間で移転はできず、ライセンス サーバー経由での同時ユーザー アクセスに利用できません。

メモ:アカデミック版には、以前の製品バージョンのライセンスは含まれません。

、XEと同様の条件になっています。いう記述がDelphi XE2 および C++Builder XE2 のリリース ノートDelphi XE2 および C++Builder XE2 のインストール ノートにはありますが、RAD Studio XE2 Q&Aでは

旧バージョンのライセンスリクエストには、180日以内という制限があるのですか?

XEで設けられていた180日以内という制限は、XE2では設けていません。新バージョンでは、購入後180日以降でも、問題なくライセンスリクエストを行えます。

となっており、XEとは扱いが異なるようです。

またオンラインヘルプも参照可能になっています。

Online Help for Delphi XE2 and C++Builder XE2
Delphi XE2 および C++Builder XE2 オンライン ヘルプ