2021年7月8日

[書籍]初めてのSQL 第3版

紀伊國屋書店新宿本店Learning SQL, 3rd Edition (Amazon US)の翻訳である

初めてのSQL 第3版 (Amazon)/Alan Beaulieu著、株式会社クイープ訳/オレイリージャパン/ISBN 978-4-87311-958-8/3,080円

を購入。

2021年7月7日

Microsoft OOB Update 2019/10

Microsoftから定例外のセキュリティアップデートがリリースされています。

Windows Print Spooler の脆弱性情報 (CVE-2021-34527) に対するセキュリティ更新プログラムの定例外での公開 – Microsoft Security Response Center

EOLとなっているWindows 7および現時点でアップデートが未リリースのWindows 10 version 1607、Windows Server 2012/2016については印刷スプーラ(Print Spooler)サービスを停止して無効にする(この場合印刷が一切できなくなる)か、グループポリシーで受信リモート印刷を無効にする(この場合リモートからローカルのプリンタに印刷できなくなるが、ローカルでの印刷は可能)かのいずれかの回避策を取ることを強くお勧めします。

CVE-2021-34527 - セキュリティ更新プログラム ガイド - Microsoft - Windows 印刷スプーラーのリモートでコードが実行される脆弱性

2021年7月1日

2021/07開催のセミナー

2021年6月21日

[書籍]プログラミングC# 第8版

紀伊國屋書店新宿本店Programming C# 8.0 (Amazon US)の翻訳である

プログラミングC# 第8版 (Amazon)/Ian Griffiths著/木下哲也訳/鈴木幸敏技術監修/オレイリージャパン/ISBN 978-4-87311-936-6/5,280円

を購入。

2021年6月1日

Firebirdロードマップ(2021/06)

Firebird 4.0のリリースに伴ってロードマップが更新されています。

Firebird: Roadmap

適当な要約
  • Firebird 2.0 - 2012年に開発終了。最新版は2012年04月の2.0.7
  • Firebird 2.1 - 2014年に開発終了。最新版は2014年12月の2.1.7
  • Firebird 2.5 - 2019年に開発終了。最新版は2019年06月の2.5.9
  • Firebird 3.0 - 安定版。最新版は2020年10月の3.0.7で、次回(3.0.8)は2021年第2四半期を予定。
  • Firebird 4.0 - 安定版。最新版は2021年06月の4.0で、次回(4.0.1)は2021年後半以降を予定。
  • Firebird 5.0 - 2021年05月に開発開始。

Firebird 4.0

Firebird 4.0がリリースされています。ODSバージョンは13になっています。

Firebird: Firebird 4.0 is released
Firebird: Firebird 4.0.0
Firebird 4.0 Release Notes (PDF)

2021/06開催のセミナー

2021年5月5日

マイナーリリースを区別する新しい標準条件シンボル

Delphi Master Release List · ideasawakened/DelphiKB Wiki · GitHubを見ていて気が付いたのですが、いままで標準条件シンボルの定義CONDITIONALEXPRESSIONSではできなかった、マイナーリリース間を区別する(たとえば10.4.1と10.4.2を見分ける)ための新しい標準条件シンボルがRAD Studio/Delphi/C++Builder 10.4.2 Sydneyで導入されたようです。

RAD Studio/Delphi/C++Builder 10.4.1 SydneyまではSystem.pasに
const
  RTLVersion = 34.00;
 {$HPPEMIT '#define RTLVersionC 3400'}
とRTLVersionが定義(34.0)されていたものが、10.4.2 Sydneyでは
const
  RTLVersion = 34.00; RTLVersion1041 = True; RTLVersion1042 = True;
 {$HPPEMIT '#define RTLVersionC 3400'}
と、RTLVersion1041/RTLVersion1042(いずれもTrue)の定義が追加されています。10.4/10.4.1ではこれらの定義が存在せず、10.5でもどうなるのかがいまのところわかっていないので使用方法も判然としないのですが、とりあえず
{$IF RTLVersion = 34.0}
{$IF RTLVersion1042}
  Label1.Caption := 'Delphi 10.4.2.';
{$ELSE}
  Label1.Caption := 'Delphi 10.4 or 10.4.1.';
{$ENDIF}

{$ELSE}
  Label1.Caption := 'Not Delphi 10.4.x.';
{$IFEND}
こんな感じになるでしょうか。

2021年5月4日

RAD Studio/Delphi 10.4.2 RTL Patch

RAD Studio/Delphi 10.4.2 SydneyのRTL Patch 1.0がリリースされています。General Patch 1.0で不足していたRSP-33117の修正が行われます。

Delphi 10.4.2 RTL Patch

Delphi 10.4.2 RTL Patchのリリース

2021年5月1日

RAD Studio/Delphi/C++Builder 10.4.2 General/Delphi Compiler Patch

RAD Studio/Delphi/C++Builder 10.4.2 SydneyのGeneral Patch 1.0およびDelphi Compiler Patch 1.0がリリースされています。General Patch 1.0はデバッグおよびC++コンパイラ/リンカの問題(RSP-33406RSP-33117RSP-32951RSP-32939RSP-32043)を、Delphi Compiler Patch 1.0はDelphiのコンパイラおよびLSPの問題(RSP-33425RSP-33232RSP-32768)を修正します。

RAD Studio 10.4.2 General Patch
Delphi 10.4.2 Compiler Patch

RAD Studio 10.4.2のPatchのリリース: General PatchおよびDelphi Compiler Patch (en)

2021/05/02追記: General Patch 1.0にはRSP-33117含まれておらず、この件に関しては別途パッチが再リリースされることになるとのことです。

2021/05/04追記: RSP-33117はRTL Patch 1.0で修正されました。

2021/05開催のセミナー

2021年4月29日

[書籍]Delphiで作るAndroidスマホアプリ

Amazon(JP)で注文した

Delphiで作るAndroidスマホアプリ (Amazon JP)/山菅昇一、山菅昇太郎著/インプレスR&D/ISBN 9784844379584/2,200円

が配送されてきました。

2021年4月1日

2021/04開催のセミナー

2021年3月16日

[書籍]Object Pascal Handbook Delphi 10.4 Sydney Edition

Amazon(JP)で注文した

Object Pascal Handbook Delphi 10.4 Sydney Edition (Amazon US, Amazon JP)/Marco Cantù著/ISBN 979-8554519963/5,606JPY(printed)

が配送されてきました。2021/03/14に注文して2日目の到着でした。

2021年3月6日

const修飾されたインタフェース型の引数としてその場で生成したインスタンスをインタフェース型にキャストしないでそのまま渡すとリークする

Dalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingをパラ見していて引っかかったのですが、タイトルを見ても何をいっているのかわからないと思うので、まずコードを。
type
  IFoo = interface
    procedure FooBar;
  end;

  TFoo = class(TInterfacedObject,IFoo)
  public
    procedure FooBar;
  end;

  TBar = class(TObject)
  public
    procedure Baz(const AFoo: IFoo);
  end;

procedure TFoo.FooBar;
begin
// Do something.
end;

procedure TBar.Baz(const AFoo: IFoo);
begin
  AFoo.FooBar;
end;
インタフェースとしてIFooと、その実装としてクラスTFooを用意し、クラスTBarにはconst修飾されたIFooを渡すBazというメソッドがあります。ここで
var
  Bar: TBar;
begin
  Bar := TBar.Create;
  Bar.Baz(TFoo.Create);
  Bar.Free;
end;
とTBar.BazにTFoo.Createで生成したインスタンスを直接渡すと、TFooはIFooとしての参照カウントの制御を受けず、リークしてしまいます。一方で
var
  Bar: TBar;
begin
  Bar := TBar.Create;
  Bar.Baz(TFoo.Create as IFoo);
  Bar.Free;
end;
とIFooにキャストしたものを渡すとリークしなくなります。

これは、インタフェース型の引数がconst修飾されているとメソッド内部で仮引数が変更されないことが保証されているため、仮引数にコピーしたことによる参照カウントの管理を行わない最適化が行われるのに対して、前者のコードでは呼び出し元で生成したインスタンスが(インタフェース型ではなく)クラス型としてしか管理されていないため、やはり参照カウントの管理を受けずに、リークしてしまう、ということのようです。しかし後者ではas IFooとキャストしたことでIFoo型の暗黙のローカル変数が用意され、これによって参照カウントによって正常に解放されます。

メソッド内部で仮引数を別のインタフェース型の変数やフィールドにコピーすると参照カウントの管理が行われて適切に解放が行われますが、これは実装に依存しますし、また引数をconst修飾していなければ大丈夫ですが、既存の実装の変更が必要になる、ということが問題になります。
このためconst修飾されたインタフェース型の引数としてその場で生成したインスタンスを渡す場合はインタフェース型にキャストするか、あるいは
type
  TFoo = class(TInterfacedObject,IFoo)
  public
    class function CreateAsIntf: IFoo;
    procedure FooBar;
  end;

class function TFoo.CreateAsIntf: IFoo;
begin
  Result := TFoo.Create;
end;

var
  Bar: TBar;
begin
  Bar := TBar.Create;
  Bar.Baz(TFoo.CreateAsIntf);
  Bar.Free;
end;
このように生成したインスタンスをインタフェースとして返すようなメソッドを用意して、そちらを経由するか、ということになります。

元ねたはもちろんDalija PrasnikarさんのDelphi Event-based and Asynchronous Programmingの"13.4 In-place construction in a const parameter"。

2021年3月1日

2021年2月26日

[書籍]再発見の発想法

紀伊國屋書店新宿本店

再発見の発想法 (Amazon)/結城浩著/SBクリエイティブ/ISBN 978-4-7973-9531-0/1,760円

を購入。

2021年2月25日

RAD Studio/Delphi/C++Builder 10.4 Sydney Release 2 (10.4.2)

RAD Studio/Delphi/C++Builder 10.4 SydneyのRelease 2 (10.4.2)がリリースされています。インストールには有効なUpdate Subscriptionが必要です。Registered Products Portalからダウンロードできます。

ISO for RAD Studio, Delphi, C++Builder 10.4.2
Web Installer for RAD Studio, Delphi, C++Builder 10.4.2

10.4 Sydney - Release 2 (en)
RAD Studio 10.4.2 における新機能と修正された顧客から報告された問題 (en)
List of publicly reported bugs fixed in 10.4.2

RAD Studio 10.4.2 Sydney Release 2の提供開始を発表 (en)
RAD Studio 10.4の新機能 (en)

RAD Studio 10.4.2で提供される2つの新しいVCLコントロール RAD Studio 10.4.2で提供される2つの新しいVCLコントロール (en)
RAD Studio 10.4.2で新しく導入されたインストールプロセスの自動化を容易にするサイレントインストーラ (docwiki(ja), en)
RAD Studio 10.4.2の新機能: Windowsストアのパッケージングをより簡単にするMSIXのサポート (docwiki(ja))
C++Builder 10.4.2の改良点: Split DWARFによるリンカのメモリ使用量の削減 (docwiki(ja))
Delphi 10.4.2 コンパイラ速度の改善 (en)
RAD Studio 10.4.2: IDEの機能改善
C++Builder 10.4.2のオープンソースC++ライブラリ (en)
C++Builder 10.4.2での堅牢な例外処理 (en)
リンカの支援:C++Builder 10.4.2でのDWARFとリンカのメモリ使用量の分割 (docwiki(ja), en)
RAD Studio 10.4/10.4.1からGetItを利用して10.4.2をダウンロードし、インストールする方法 (en)
Delphi 10.4.2におけるCode Insightの改善 (en)

2021年2月23日

[書籍]Delphi Event-based and Asynchronous Programming

Amazon(JP)で注文した

Delphi Event-based and Asynchronous Programming (Amazon US, Amazon JP)/Dalija Prasnikar、Neven Prasnikar Jr.著/FastSpring/ISBN 979-8705971688/4,869JPY(printed)

が配送されてきました。2021/02/21に注文して2日目の到着でした(おそらく日本国内でのprint on demandだと思われます)。

2021年2月8日

DDevExtensions 2.87

Andreas HausladenさんDDevExtensionsですが、GitHubでホストされています。オリジナルのリポジトリは

ahausladen/DDevExtensions: Delphi IDE Plugin

ですが、Delphi/C++Builder 10.4 Sydneyの対応は

DelphiPraxis/DDevExtensions: Delphi IDE Plugin

こちらのフォークからリリースされています。

Release DDevExtensions v2.87 Delphi 10.4 · DelphiPraxis/DDevExtensions

2021年2月1日

2021/02開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2021年1月8日

[書籍]初めてのマルウェア解析

紀伊國屋書店新宿本店Learning Malware Analysis (Amazon US)の翻訳である

初めてのマルウェア解析 (Amazon)/Monnappa K A著/石川朝久訳/北原憲、中津留勇技術監修/オライリージャパン/ISBN 978-4-87311-929-8/4,400円

を購入。

2021年1月1日

2021/01開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年12月18日

RAD Studio/Delphi/C++Builder 10.4.1 Sydney Apple Platforms Patch (December update)

RAD Studio/Delphi/C++Builder 10.4.1 SydneyのApple Platforms Patchのアップデートがリリースされています。2020/11/25にリリースされたApple Platforms Patchの更新で、さらにiOSターゲットでClientDataSetコンポーネントがリンクエラーになる問題(RSP-31795)、iOS SDK上のC++のいくつかの問題、iOS 14でビルドすると"unknown type name __UINTPTR_TYPE__"でエラーになる問題、iOS 14 SDKでビルドすると"invalid node: this may result from using a map iterator as a sequence iterator, or vice-versa"エラーまたはリンカエラーになる問題(RSP-31014)、DBXを参照しているとリンカエラーになる問題が修正されています。

RAD Studio 10.4.1 Apple Platforms Patch (December update)

RAD Studio 10.4.1向けPatch: Appleプラットフォームの修正(12月更新版) (en)

2020年12月2日

[書籍]達人プログラマー(第2版)

紀伊國屋書店新宿本店The Pragmatic Programmer, 20th Anniversary Edition (Amazon US)の翻訳である

達人プログラマー(第2版) (Amazon)/David Thomas、Andrew Hunt著/村上雅章訳/オーム社/ISBN 978-4-274-22629-8/3,520円

を購入。

2020年12月1日

2020/12開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年11月25日

RAD Studio/Delphi/C++Builder 10.4.1 Sydney Apple Platforms Patch

RAD Studio/Delphi/C++Builder 10.4.1 SydneyのApple Platforms Patchがリリースされています。macOS 11.0 Big Sur上での例外送出時および終了時の問題(RSP-30000)の修正と、PAServerでXCode 12からのSDKインポート、iOS 14デバイスでのデバッグ実行のサポート(RSP-30806RSP-31014RSP-31667RSP-31049)が追加されています。現時点(2020/11/25)ではIDEのGetItパッケージマネージャからのみ適用できます。Registered Products Portalからダウンロードできるようになりました。

RAD Studio 10.4.1向けPatch: Appleプラットフォームの修正 (en)

2020年11月18日

RAD Studio ロードマップ 2020/11

RAD Studio/Delphi/C++Builderのロードマップが更新されています。

RAD Studio 2020年11月付ロードマップ (en)
RAD Studio 2020年11月付ロードマップのPM解説 (en)

次期アップデートとなる10.4.2(2021/1H)と次期メジャーリリースの10.5(2021/2H)が予告されています。

また後で雑にまとめます(たぶん)。

2020年11月17日

[書籍][eBook]Delphi GUI Programming with FireMonkey

Packt Publishingで注文した

Delphi GUI Programming with FireMonkey (Amazon US, Amazon JP)/Andrea Magni著/Packt Publishing/ISBN 9781788624176/49.99USD(printed+ebook)

が配送されてきました(今回の配送もDHL/佐川急便で、インドのチェンナイからの発送でした)。2020/10/31に注文して17日目の到着、49.99USD=5,232JPY5,350JPY(1USD=104.66JPY、暫定107.022JPY)でした。

2020年11月11日

Windows 7 SP1上のRAD Studio 10.4.1 SydneyでGetItパッケージマネージャがサーバに接続できないときの対処

RAD Studio/Delphi/C++Builder 10.4はWindows 7上での動作はサポートされていませんが、実際には概ね動作します(インストール時には警告されます)。しかし昨日リリースされた10.4.1のCompiler and LSP Hotfixを取り込もうとしてGetItパッケージマネージャを呼び出すと、接続エラーとなってしまいます。まず最初に疑うのはオフラインでインストールしたときにGetItがオフラインモードのままになっているという件ですが、今回はこれとは違うようです。そこでIDERAのコミュニティを見ると、同様の報告がいくつもあり、その中の

GetIT Package Manager 10.4 is not working?

でJohn C7598さんが、Windows 7で以前同じような問題がありMicrosoftのKB3140245

WinHTTP が Windows での既定のセキュリティで保護されたプロトコルとして TLS 1.1 および TLS 1.2 を有効にする更新プログラム

で解決した、とのことでした。そこでこれに従ってデフォルトのセキュアプロトコルとしてTLS 1.1/1.2を有効にしたところ、正常に接続できるようになったので、手順をまとめておきます。
  1. C:\Windows\System32にあるWinhttp.dllのバージョンが6.1.7601.23375以降であることを確認します(必要に応じて更新プログラムを適用)。
  2. レジストリキー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp (x86/x64) および HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp (x64のみ)にDWORD値 DefaultSecureProtocols を作成し、16進値A80(10進値2688)を設定する。
  3. レジストリキー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client および HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client にDWORD値 DisabledByDefault を作成し、16進値0(10進値0)を設定する。

Microsoft Monthly Update 2020/11

今日はMicrosoftのセキュリティアップデートの日です。
2020 年 11 月のセキュリティ更新プログラム - リリース ノート - セキュリティ更新プログラム ガイド - Microsoft
2020 年 11 月のセキュリティ更新プログラム (月例) – Microsoft Security Response Center

2020年11月10日

RAD Studio/Delphi/C++Builder 10.4.1 Sydney Compiler and LSP Hotfix

RAD Studio/Delphi/C++Builder 10.4.1 SydneyのCompiler and LSP Hotfixがリリースされています。特定のアライメントのデータレイアウトに関する2件の問題(RSP-30890RSP-30787)および再コンパイル時のパフォーマンスに関する3件の問題(RSP-22074RSP-30714RSP-30627)を修正します。Ent SKUを含めすべてのSKU向けのもの(General)と、Ent SKU以上のみのもの(Linux)の2つのhotfixがあるので注意が必要です(適用はどちらが先でも構わないようです)。現時点(2020/11/10)ではIDEのGetItパッケージマネージャからのみ適用できます。Registered Products Portalからダウンロードできるようになりました。

RAD Studio 10.4.1 Delphi Compiler and Code Completion Patch
RAD Studio 10.4.1 Delphi Compiler and Code Completion Patch for Linux

RAD Studio10.4.1向けPatch:DelphiコンパイラとLSPの修正 (en)

2020年11月1日

2020/11開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年10月29日

[書籍]Code Faster in Delphi

Amazon(JP)で注文した

Code Faster in Delphi (Amazon US, Amazon JP)/Alister Christie著/Leanpub/ISBN 979-8686719118/4,065JPY(printed)

が配送されてきました。2020/10/21に注文して9日目の到着でした。

2020年10月21日

Firebird 3.0.7

Firebird 3.0.7がリリースされています。

Firebird: Firebird 3.0.7
Firebird 3.0.7 Release Notes (PDF)

Version 3.0.6ユーザは3.0.7に移行することを強く推奨するとのことです。またメモリ同期の互換性が失われたため、同一のホスト上で3.0.6と3.0.7を混在させて動作させると問題が発生する可能性があるとのことです。

2020年10月16日

2020年10月6日

RAD Studio/C++Builder 10.4.1 Sydney Patch 1

RAD Studio/C++Builder 10.4.1 SydneyのPatch 1がリリースされています。C++BuilderでIDEで生成したイベントハンドラがそこに要求されるものと互換性がない場合がある問題(RSP-29734)を修正します。現時点(2020/10/06)でポータルサイトGetIt webポータル https://getitnow.embarcadero.com/にはアップロードされておらず、IDEのGetItパッケージマネージャからのみ適用可能です。Registered Products Portalからダウンロードできます。

10.4.1 Patch 1 (C++Builder)

C++Builder10.4.1向けのPatch:イベントハンドラ生成で生じる問題の修正 (en)

2020年10月1日

2020/10開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年9月1日

2020/09開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年8月21日

[書籍]Delphi Quick Syntax Reference

Amazon(JP)で注文した

Delphi Quick Syntax Reference (Amazon US, Amazon JP)/John Kouraklis著/Apress/ISBN 978-1-4842-6112-5/4,009JPY(printed)

が配送されてきました。2020/08/19に注文して3日目の到着でした。

2020年8月1日

2020/08開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年7月29日

RAD Studio/Delphi/C++Builder 10.4 Sydney Patch 3

RAD Studio/Delphi/C++Builder 10.4 SydneyのPatch 3がリリースされています。Patch 1/2同様、GetItからダウンロードできます(が、インストールは手動です)。事前にPatch 1、Patch 2を適用しておく必要があります。

30933 RAD Studio 10.4 Patch 3

ポータルサイトからもダウンロードできます。

10.4 Patch 3

RAD Studio 10.4 Patch 3が公開されました (en)

2020年7月25日

InterBase 2017 Update 4

InterBase 2017 Update 4がリリースされています。バージョンは13.4.0.346となっています。いくつかの不具合の修正が行われています。

30932 InterBase 2017 Update 4 (13.4.0.346) for Windows
30931 InterBase 2017 Update 4 (13.4.0.346) for Linux and macOS
30930 InterBase 2017 Server Ed., Win/Linux/macOS (13.4.0.346, English)
30929 InterBase 2017 Server Ed, Win/Linux/macOS (13.4.0.346, Japanese)
30928 InterBase 2017 ToGo Ed. (13.4.0.346) Win/Linux/macOS/iOS/Android

InterBase 2017 Update 4 Readme - InterBase (en)
解決された不具合 (en)

2021/10/01追記: いつの間にかHotfix 1がリリースされていたようです(2020/10)。バージョンは13.4.0.350となっています。

2020年7月1日

2020/07開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年6月28日

2020年6月1日

2020/06開催のセミナー

  • Web Seminar
  • Live Seminar
  • Community Event

2020年5月31日

DDevExtensions 2.86

Andreas HausladenさんDDevExtensionsがアップデートされてVersion 2.86になっています。RAD Studio 10.4 Sydney対応ではなく、TListViewのOwnerDataの問題を修正して、"Find Unit" replacement dialogのパフォーマンスが向上したとのことです。

DDevExtensions 2.86 for Delphi 2009-10.3.3 – Andy's Blog and Tools

2020年5月27日

RAD Studio/Delphi/C++Builder 10.4 Sydneyリリース

RAD Studio/Delphi/C++Builder 10.4 Sydneyがリリースされています。

30921 RAD Studio, Delphi, C++Builder 10.4 Web Install
30922 RAD Studio, Delphi, C++Builder 10.4 ISO
30923 RAD Studio 10.4 Patch 1

ポータルサイトからもダウンロード可能です(BDEはポータルサイトのみ)。またPatch 1はGetIt経由でインストールできます。
RAD Studio, Delphi, C++Builder 10.4 Web Install
RAD Studio, Delphi, C++Builder 10.4 ISO
RAD Studio 10.4 Patch 1
BDE for RAD Studio 10.4

Webインストールした場合は以下のコマンドラインでオンラインモードに切り替えないと、GetItパッケージマネージャからの各種パッケージのインストールに失敗するとのことです(やましょうさん、DEKOさん、情報ありがとうございます)。
GetItCmd.exe -c=useonline

RAD Studio Sydney ヘルプ (en)
リリース ノート (en)
インストール ノート (en)
新機能 (en)
RAD Studio 10.4 における新機能と修正された顧客から報告された問題 (en)
List of publicly reported bugs fixed in 10.4
注: 上記のヘルプ、リリースノート、インストールノートの日本語訳は不正確な(10.3 Rioのものがそのままになっている)部分があるようです。必要に応じて英語のものを参照することをお勧めします。

Delphi 10.4 Sydney is Available
RAD Studio 10.4 Now Available, Learn More

Delphi 10.4の新機能: Code Insightの再設計 (en)
Delphi 10.4の新機能: カスタム マネージド レコード (en)
RAD Studio 10.4の新機能: 新しいVCL TEdgeBrowserコンポーネント (en)
RAD Studio 10.4の新機能: VCLのコントロールごとのスタイル設定 (en)
RAD Studio 10.4の新機能: GetItパッケージマネージャーの改善 (en)
C++Builder 10.4の新機能: Win64 C++向けの新しいデバッガ (en)
Delphi 10.4におけるランタイムライブラリの強化 (en)
RAD Studio 10.4 では過去最多の問題数が修正されました (en)

RAD Studio 10.4 Patch 1: ファイルと C++ デバッグの欠落 - パッチをインストールする新しい方法も! (en)
RAD Studio Sample GitHub Repository の設定の問題があり、修正されました。 (en)
RAD Studio 10.4でデバッグ時に予期しないポップアップウィンドウが表示される症状の回避策について (en)
iOS AppStoreの1024x1024アイコン問題の回避策 (en)

RAD Studio 10.4 で変更されたFireDACトランザクション分離レベルの設定 (en)

インストール時に気を付けることがいくつかあるようです。

2020年5月19日

新サポートナレッジベースサイト公開

先日の新ポータルサイトに続いて、サポートナレッジベースサイトとなるSupport Wikiが公開されています。

Support (ja)
Support (en)
Support (de)
Support (fr)

新しいサポートナレッジベースサイト「Support Wiki」オープン!

従来のEDNやSupport KBで公開されてきたアーティクルは今後こちらで扱われるようになるとのことです。ただ言語別(en/de/fr/ja)に完全に分かれてしまっている(検索も言語別に分断されている)ことや、日本語のメインページはすべてのページを通して確認できない(カテゴリに入っていくか検索しないといけない)こと、逆に英語/ドイツ語/フランス語のメインページは一覧のみでカテゴリ分けされていないこと、情報としてもまだ網羅性が足りない(もっとたくさんの情報があるはずですよね)など、改善の余地がまだまだありそうです。今後の内容の充実に期待したいところです。

ちなみに従来のEDNやSupport KBのアーティクルがどれだけあるかというと、これだけあります。
EDN Article Index 30001-
EDN Article Index 31001-
EDN Article Index 32001-
EDN Article Index 33001-
EDN Article Index 34001-
EDN Article Index 35001-
EDN Article Index 36001-
EDN Article Index 37001-
EDN Article Index 38001-
EDN Article Index 39001-
EDN Article Index 40001-
EDN Article Index 41001-
EDN Article Index 42001-
EDN Article Index 43001-
EDN Article Index 44001-

InterBase 2020 Update 1

InterBase 2020 Update 1がリリースされています。バージョンは14.1.0.22014.1.0.231となっています。

30916 InterBase 2020 Server Edition, Windows (14.1.0.231)
30917 InterBase 2020 Server Edition, Linux (14.1.0.231)
30919 InterBase 2020 Update 1 (14.1.0.231) for Windows
30924 InterBase 2020 Update 1 (14.1.0.231) for Linux
30918 InterBase 2020 ToGo Ed. (14.1.0.231) Win/Linux/macOS/iOS/Android

InterBase 2020 Update 1 Readme - InterBase (en)
InterBase 2020 Update 1 の新機能 - InterBase (en)
解決された不具合 - InterBase (en)

InterBase 2020 Update 1 リリースのお知らせ (en)
InterBase 2020 Update 1 リリースのお知らせ (en)

2020/06/09追記: Update 1 for Linuxのリリースのタイミングでその他のエディション/アップデートもあわせてHotfix 1が適用された14.1.0.231に差し替えとなった模様です。ReadmeによればHotfix 1では4点の不具合が修正されています。

2021/10/01追記: いつの間にかHotfix 2もリリースされていたようです(2020/10)。バージョンは14.1.0.319となっています。Resolved DefectsによるとHotfix 2では6点の不具合が修正されています。

2020年5月1日

2020/05開催のセミナー

2020年4月20日

新ポータルサイト公開

以前からアナウンスされていたエンバカデロの新しいポータルサイトが公開されています。

Registered Products Portal

新しいエンバカデロ・ライセンス/ダウンロード・ポータル (en)

これまでのEDN(Embarcadero Developer Network)やCC(Code Central)に替わって、今後ライセンス管理や製品のダウンロードはこのポータルサイト経由になるとのことです。これにより、従来CCで

30915 Delphi 10.3.3 Open Array Patch
https://cc.embarcadero.com/Item/30915

というダウンロードページになっていたものが、

Delphi 10.3.3 Open Array Patch
https://my.embarcadero.com/#downloadDetail/661

のようになるとのことです(EDNやCCは順次フェードアウト予定)。

また製品以外のサンプルコードなどはGitHubに移行するとのことです。

参考: The Future of CodeCentral

2020年4月10日

[書籍]TMS WEB Core

Amazon(JP)で注文した

TMS WEB Core (Amazon US, Amazon JP)/Dr. Holger Flick著/FlixEngineering LLC/ISBN 979-8615692895/4,930JPY(printed)

が配送されてきました。2020/04/07に注文して4日目の到着でした。

2020年4月1日

2020/04開催のセミナー

2020年3月22日

[書籍]The Little Book of Delphi

Amazon(JP)で注文した

The Little Book of Delphi (Amazon US, Amazon JP)/Huw Collingbourne著/Dark Neon/ISBN 978-1913132095/2,331JPY(printed)

が配送されてきました。2020/03/20に注文して2日目の到着でした。

2020年3月1日

2020/03開催のセミナー

2020年2月26日

RAD Studio/Delphi/C++Builder 10.3.3 Rio Open Array Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのOpen Array Patchがリリースされています。Windows x64でオープン配列パラメータを持つ継承元関数を呼び出すとAVになる問題(RSP-23939)を修正します。

30915 Delphi 10.3.3 Open Array Patch

RAD Studio 10.3.3 MidasおよびDelphi Open Arrayパッチ (en)

RAD Studio/Delphi/C++Builder 10.3.3 Rio Midas.dll Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのMidas.dll Patchがリリースされています。Threading and TLS Patchの影響を受けるためリビルドされているとのことです。

30914 RAD Studio 10.3.3 Midas.dll Patch

RAD Studio 10.3.3 MidasおよびDelphi Open Arrayパッチ (en)

2020年2月4日

Embarcadero Tech Vision 20

本日10:00からEmbarcadero Tech Vision 20UDX GALLERY NEXTで行われます。今回は一部のセッションのみ配信があります。
  • Delphi@25 - Developers Focus
  • Enterprise Application Development Focus
    • 「キーノート~テクノロジーショーケース」
    • 「サービス指向アプローチとモダンWebアプリケーションの構築~カスタマーショーケース」
    • 「システム価値を高めるモダナイゼーションアプローチ~パートナーショーケース」
    • 「コンポーネントアプローチによるソフトウェア開発の俊敏性と品質向上の実現~カスタマーショーケース」
    • 「クロージング」
  • Developers Communication
    • 「MEET EMBARCADERO & COOL APP SELECTIONS」

2020年2月1日

2020/02開催のセミナー

2020年1月30日

RAD Studio/C++Builder 10.3.3 Rio Threading and TLS Patch

RAD Studio/C++Builder 10.3.3 RioのThreading and TLS Patchがリリースされています。Windows x64上でスレッドを作るとアクセス違反が発生する問題(RSP-27180)を修正します。

30909 C++Builder 10.3.3 Threading and TLS Patch

C++Builder 10.3.3スレッドとTLSパッチ (en)

2020年1月19日

RAD Studio/Delphi/C++Builder 10.3.3 Rio iPhone XS and XR Debugging Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのiPhone XS and XR Debugging Patchがリリースされています。A12プロセッサで動作するiOS(iPhone XS/XR)上でデバッグできない問題(RSP-26709RSP-25732)を修正します。

30908 RAD Studio 10.3.3 iPhone XS and XR Debugging Patch

RAD Studio 10.3.3 iPhone XSおよびXRデバッグパッチ (en)

2020年1月13日

2020年1月11日

RAD Studio/Delphi/C++Builder 10.3.3 Rio Indy Server SSL Certificate Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのIndy Server SSL Certificate Patchがリリースされています。Windows上でIndyを使用したwebサーバアプリケーションがSSL証明書を読み込めない問題(RSP-27144)を修正します。

30906 RAD Studio 10.3.3 Indy Server SSL Certificate Patch

RAD Studio 10.3.3 IndyサーバーSSL証明書パッチ (en)

2020年1月1日

2020/01開催のセミナー

2019年12月24日

[書籍][eBook]Mastering Delphi Programming

Packt Publishingで注文した

Mastering Delphi Programming: A Complete Reference Guide (Amazon US, Amazon JP)/Primož Gabrijelčič著/Packt Publishing/ISBN 9781838989118/44.99USD(printed+ebook)

が配送されてきました(今回の配送もDHLで、インドのチェンナイからの発送でした)。2019/12/16に注文して9日目の到着、44.99USD=5,042JPY(1USD=112.07JPY)でした。

2019年12月21日

RAD Studio/Delphi/C++Builder 10.3.3 Rio Android Services Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのAndroid Services Patchがリリースされています。AAB(Android App Bundle)としてパッケージ化されたアプリケーションでネイティブライブラリをロードできずにAndroidサービスが実行できない問題を修正します。

30905 RAD Studio 10.3.3 Android Services Patch

RAD Studio 10.3.3 Androidサービスパッチ (en)

2019年12月20日

WindowsのNTFSでハードリンクを扱う

このアーティクルはDelphi Advent Calendar 2019の20日目の記事です(1日ぶり6回目)。

Windows上でファイル/ディレクトリに対してリンク(複数のエントリを用意する)する方法にはシンボリックリンクジャンクション、ハードリンクがありますが、ここではDelphiからハードリンクを扱います。

ハードリンクはNTFS上のファイル本体に対するディレクトリエントリを複数用意する(あるいはファイル本体に複数のパス名をつける)、というもので、一般のユーザ権限で作れ、NTFS以外にSMB3.0でもサポート(ReFSは不可)されていますが、ディレクトリを扱うことができず、同一ボリューム上にしかリンクを作ることができません。また最大のリンク数が1023に制限されています。

Windowsのシンボリックリンクとジャンクションとハードリンクの違い:Tech TIPS - @IT

普通に(CreateFile関数で)作成したファイルはリンク数が1になっており、ハードリンクを作成する毎にリンク数が増え、逆にハードリンクをDeleteFile関数で削除する毎にリンク数は減っていき、リンク数が0になるとそのファイルの実体も削除されます。

ここではハードリンクの作成と、指定されたファイルのハードリンクの数と一覧の取得をDelphiから行います。以下のコードは(System.)IOUtilsユニットのTPathレコード型や無名メソッドを使っているためにDelphi 2010以降の対応になっていますが、それ以前のバージョンであっても適当に修正すれば動くはずです。

interface

{$IF RTLVersion < 21.0}
{$MESSAGE ERROR 'Delphi 2010 or later is required.'}
{$IFEND}

uses
{$IF RTLVersion < 23.0}
  Windows, SysUtils, Classes, IOUtils;
{$ELSE}
  Winapi.Windows,
  System.SysUtils, System.Classes, System.IOUtils;
{$IFEND}

type
  { THardLink }
  THardLink = record
  private
    class procedure DoGetFileList(const Filename: String; EnumProc: TProc); static;
  public
    class procedure Create(const LinkFile: String; const SourceFile: String); static;
    class function GetFileList(const Filename: String): TArray; overload; static;
    class procedure GetFileList(const Filename: String; Strings: TStrings); overload; static;
    class function GetNumberOfLinks(const Filename: String): Integer; static;
  end;

implementation

{ HANDLE FindFirstFileNameW(LPCWSTR lpFileName, DWORD dwFlags, LPDWORD StringLength, PWSTR LinkName); }
function FindFirstFileNameW(const lpFileName: PWideChar; dwFlags: DWORD; var StringLength: DWORD; LinkName: PWideChar): THandle; stdcall; external kernel32;
{$EXTERNALSYM FindFirstFileNameW}

{ BOOL FindNextFileNameW(HANDLE hFindStream, LPDWORD StringLength, PWSTR LinkName); }
function FindNextFileNameW(hFindStream: THandle; var StringLength: DWORD; LinkName: PWideChar): BOOL; stdcall; external kernel32;
{$EXTERNALSYM FindNextFileNameW}

class procedure THardLink.Create(const LinkFile: String; const SourceFile: String);
begin
  if CreateHardLink(PChar(LinkFile),PChar(SourceFile),nil) = False then
  begin
    RaiseLastOSError;
  end;
end;

class function THardLink.GetFileList(const Filename: String): TArray;
var
  Files: TArray;
begin
  SetLength(Files,0);

  DoGetFileList(Filename,
    procedure (Filename: String)
    begin
{$IF RTLVersion >= 28.0}
      Files := Files + [Filename];
{$ELSE}
      SetLength(Files,Length(Files) + 1);
      Files[Length(Files) - 1] := Filename;
{$IFEND}
    end);

  Result := Files;
end;

class procedure THardLink.GetFileList(const Filename: String; Strings: TStrings);
begin
  Strings.Clear;

  DoGetFileList(Filename,
    procedure (Filename: String)
    begin
      Strings.Add(Filename);
    end);
end;

class function THardLink.GetNumberOfLinks(const Filename: String): Integer;
var
  hFile: THandle;
  FileInformation: TByHandleFileInformation;
begin
  hFile := CreateFile(PChar(Filename),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hFile = INVALID_HANDLE_VALUE then
  begin
    RaiseLastOSError;
  end;

  try
    if GetFileInformationByHandle(hFile,FileInformation) = False then
    begin
      RaiseLastOSError;
    end;
    Result := FileInformation.nNumberOfLinks;

  finally
    CloseHandle(hFile);
  end;
end;

class procedure THardLink.DoGetFileList(const Filename: String; EnumProc: TProc);
var
  hFindStream: THandle;
  Len: DWORD;
  Buffer: String;
  Root: String;
begin
  Root := ExcludeTrailingPathDelimiter(TPath.GetPathRoot(Filename));

  { Retrieve buffer size }
  Len := 0;
  FindFirstFilenameW(PWideChar(Filename),0,Len,nil);
  if GetLastError <> ERROR_MORE_DATA then
  begin
    RaiseLastOSError;
  end;
  SetLength(Buffer,Len);

  { Get first filename without drive letter }
  hFindStream := FindFirstFilenameW(PWideChar(Filename),0,Len,PWideChar(Buffer));
  if hFindStream = INVALID_HANDLE_VALUE then
  begin
    RaiseLastOSError;
  end;

  try
    while True do
    begin
      { Adjust buffer size }
      SetLength(Buffer,Len - 1);

      { Callback }
      EnumProc(Root + Buffer);

      { Retrieve buffer size }
      Len := 0;
      FindNextFileNameW(hFindStream,Len,nil);
      case GetLastError of
        ERROR_HANDLE_EOF:
        begin
          Break;
        end;

        ERROR_MORE_DATA:
        begin
        end;

        else
        begin
          RaiseLastOSError;
        end;
      end;

      { Get next filename without drive letter }
      SetLength(Buffer,Len);
      if FindNextFileNameW(hFindStream,Len,PWideChar(Buffer)) = False then
      begin
        RaiseLastOSError;
      end;
    end;

  finally
    { Close }
    {$IF RTLVersion >= 23.0}Winapi.{$IFEND}Windows.FindClose(hFindStream);
  end;
end;

ハードリンクはCreateHardLink関数で作成し、リンク数はGetFileInformationByHandle関数で取得したBY_HANDLE_FILE_INFORMATION構造体のnNumberOfLinksで知ることができます。またハードリンクの一覧はFindFirstFileName関数/FindNextFileName関数/FindClose関数で取得できます。このときFindFirstFilename関数/FindNextFileName関数を一旦LinkName=nilで呼び出して必要なサイズを取得し、ファイル名の格納に必要な領域を確保してからもう一度FindFirstFilename関数/FindNextFileName関数を呼び出しています。

WindowsのNTFSでハードリンクを扱う(Gist)

2019年12月19日

Windowsのユーザ名とSIDを相互に変換する

このアーティクルはDelphi Advent Calendar 2019の19日目の記事です(2年ぶり5回目)。またDelphi Programming Tipsカテゴリの記念すべき(かどうかは微妙)100本目の記事になります。

Windows上のユーザはそれぞれ固有のSID(Security Identifier/セキュリティ識別子)で管理されています。

オブジェクトを識別するSIDとは?:Tech TIPS - @IT

ユーザ名とSIDを相互に変換するにはWin32APIのLookupAccountName関数とLookupAccountSid関数を使用します。ところがこれらの関数でSIDは文字列ではなくSID構造体で扱う必要があります。ということで文字列表現のSIDとSID構造体を相互に変換する必要がありますが、これを行うのがConvertSidToStringSid関数とConvertStringSidToSid関数になります。

それではまずユーザ名をSIDに変換するほうから。
uses
{$IF RTLVersion < 23.0}
  Windows, SysUtils;
{$ELSE}
  Winapi.Windows, System.SysUtils;
{$IFEND}

{$IF RTLVersion < 28.0}
{ Win32API ConvertSidToStringSid }
{$IFNDEF Unicode}
function ConvertSidToStringSid(Sid: PSID; var StringSid: LPSTR): BOOL; stdcall; external advapi32 name 'ConvertSidToStringSidA';
{$ELSE}
function ConvertSidToStringSid(Sid: PSID; var StringSid: LPWSTR): BOOL; stdcall; external advapi32 name 'ConvertSidToStringSidW';
{$ENDIF}
{$EXTERNALSYM ConvertSidToStringSid}
{$IFEND}

{$IF RTLVersion < 19.0}
{ Win32API LookupAccountName }
{$IFNDEF Unicode}
function LookupAccountName(lpSystemName, lpAccountName: LPCSTR;
  Sid: PSID; var cbSid: DWORD; ReferencedDomainName: LPSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountNameA';
{$ELSE}
function LookupAccountName(lpSystemName, lpAccountName: LPCWSTR;
  Sid: PSID; var cbSid: DWORD; ReferencedDomainName: LPWSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountNameW';
{$ENDIF}
{$EXTERNALSYM LookupAccountName}
{$IFEND}

function UsernameToSid(const AUsername: String): String;
var
  PSID: Pointer;
  SidSize: DWORD;
  Domain: String;
  DomainLen: DWORD;
  SidName: SID_NAME_USE;
  SidStr: PChar;
begin
  PSID := nil;
  SidStr := nil;
  try
    SidSize := 0;
    DomainLen := 0;
    LookupAccountName(nil,PChar(AUsername),nil,SidSize,nil,DomainLen,SidName);
    if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
    begin
      RaiseLastOSError;
    end;

    PSID := Pointer(LocalAlloc(LPTR,SidSize));
    SetLength(Domain,DomainLen);
    if LookupAccountName(nil,PChar(AUsername),PSID,SidSize,PChar(Domain),DomainLen,SidName) = False then
    begin
      RaiseLastOSError;
    end;

    ConvertSidToStringSid(PSID,SidStr);
    SetString(Result,SidStr,StrLen(SidStr));

  finally
    if PSID <> nil then
    begin
{$IF RTLVersion >= 32.0}
      if LocalFree(PSID) <> nil then
{$ELSE}
{$IFNDEF WIN64}
      if LocalFree(DWORD(PSID)) <> 0 then
{$ELSE}
      if LocalFree(UInt64(PSID)) <> 0 then
{$ENDIF}
{$IFEND}
      begin
        RaiseLastOSError;
      end;
    end;

    if SidStr <> nil then
    begin
{$IF RTLVersion >= 32.0}
      if LocalFree(SidStr) <> nil then
{$ELSE}
{$IFNDEF WIN64}
      if LocalFree(DWORD(SidStr)) <> 0 then
{$ELSE}
      if LocalFree(UInt64(SidStr)) <> 0 then
{$ENDIF}
{$IFEND}
      begin
        RaiseLastOSError;
      end;
    end;
  end;
end;
まずLookupAccountName関数でユーザ名に対応するSIDをSID構造体に取得し、これをConvertSidToStringSid関数で文字列に変換します。このときLookupAccountName関数を一旦SID=nil、ReferencedDomainName=nilで呼び出して必要なサイズを取得し、SIDはLocalAlloc関数で、ReferencedDomainNameは(文字列なので)SetLengthで領域を確保して、もう一度LookupAccountName関数を呼ぶようにしているのと、LocalAlloc関数、ConvertSidToStringSid関数で確保された領域はLocalFree関数で解放しなければならない、というところに気をつける必要があります(DelphiのバージョンによってLocalFree関数の宣言に差異があるので$IF RTLVersionと$IFNDEF WIN64で分岐しています)。

次にSIDをユーザ名に変換します。
{$IF RTLVersion < 28.0}
{ Win32API ConvertStringSidToSid }
{$IFNDEF Unicode}
function ConvertStringSidToSid(StringSid: LPCSTR; var Sid: PSID): BOOL; stdcall; external advapi32 name 'ConvertStringSidToSidA';
{$ELSE}
function ConvertStringSidToSid(StringSid: LPCWSTR; var Sid: PSID): BOOL; stdcall; external advapi32 name 'ConvertStringSidToSidW';
{$ENDIF}
{$EXTERNALSYM ConvertStringSidToSid}
{$IFEND}

{$IF RTLVersion < 19.0}
{ Win32API LookupAccountSid }
{$IFNDEF Unicode}
function LookupAccountSid(lpSystemName: LPCSTR; Sid: PSID;
  Name: LPSTR; var cbName: DWORD; ReferencedDomainName: LPSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountSidA';
{$ELSE}
function LookupAccountSid(lpSystemName: LPCWSTR; Sid: PSID;
  Name: LPWSTR; var cbName: DWORD; ReferencedDomainName: LPWSTR;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountSidW';
{$ENDIF}
{$EXTERNALSYM LookupAccountSid}
{$IFEND}

function SidToUsername(const ASID: String): String;
var
  PSID: Pointer;
  UserNameLen: DWORD;
  Domain: String;
  DomainLen: DWORD;
  SidName: SID_NAME_USE;
begin
  PSID := nil;
  try
    if ConvertStringSidToSid(PChar(ASID),PSID) = False then
    begin
      RaiseLastOSError;
    end;

    UserNameLen := 0;
    DomainLen := 0;
    LookupAccountSid(nil,PSID,nil,UserNameLen,nil,DomainLen,SidName);
    if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
    begin
      RaiseLastOSError;
    end;

    SetLength(Result,UserNameLen);
    SetLength(Domain,DomainLen);
    if LookupAccountSid(nil,PSID,PChar(Result),UserNameLen,PChar(Domain),DomainLen,SidName) = False then
    begin
      RaiseLastOSError;
    end;

    SetLength(Result,StrLen(PChar(Result)));

  finally
    if PSID <> nil then
    begin
{$IF RTLVersion >= 32.0}
      if LocalFree(PSID) <> nil then
{$ELSE}
{$IFNDEF WIN64}
      if LocalFree(DWORD(PSID)) <> 0 then
{$ELSE}
      if LocalFree(UInt64(PSID)) <> 0 then
{$ENDIF}
{$IFEND}
      begin
        RaiseLastOSError;
      end;
    end;
  end;
end;
こちらはまずConvertStringSidToSid関数でSIDの文字列をSID構造体に変換し、LookupAccountSid関数でユーザ名に変換します。こちらもLookupAccountSid関数をName=nil、ReferencedDomainName=nilで呼び出して必要なサイズを取得し、SetLengthで領域を確保してからもう一度LookupAccountSid関数を呼び出しています。またConvertStringSidToSid関数で確保したSID構造体はLocalFree関数で解放します。

使用しているWin32APIのうち、LookupAccountSid関数/LookupAccountName関数はDelphi 2009で、ConvertStringSidToSid関数/ConvertSidToStringSid関数はDelphi XE7で(Win32API.)Windowsユニットに関数宣言が追加されたため、それ以前のバージョンでは明示的に定義が必要です。

Windows上のユーザ名とSIDを相互変換(Gist)

2019年12月14日

RAD Studio/Delphi/C++Builder 10.3.3 Rio Android Debugger Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのAndroid Debugger Patchがリリースされています。これはAndroid上でのデバッグに関係するいくつかの問題を修正します。
30904 RAD Studio 10.3.3 Android Debugger Patch

Delphi 10.3.3 Android デバッグパッチ (en)

RAD Studio/Delphi/C++Builder 10.3.3 Rio IDE and VCL Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのIDE and VCL Patchがリリースされています。これはコード補完ウィンドウのスクロールバーの表示が残ってしまう問題(RSP-26731)とTActionManager/TPopupActionBarコンポーネントを使用しているとコンパイルに失敗する問題(RSP-27035)を修正します。

30903 RAD Studio 10.3.3 IDE and VCL Patch

RAD Studio 10.3.3 IDE/VCLパッチ、ローカリゼーションパッチ (en)

2019年12月9日

RAD Studio/Delphi/C++Builder 10.3.3 Rio localization patch

RAD Studio/Delphi/C++Builder 10.3.3 Rioのlocalization patchがリリースされています。これはローカライズ(DE/FR/JA)の問題を解決するものです。

30901 RAD Studio 10.3.3 localization patch (DE/FR)
30902 RAD Studio 10.3.3 localization patch (JA)

RAD Studio 10.3.3 IDE/VCLパッチ、ローカリゼーションパッチ (en)

2019年12月6日

RAD Studio/Delphi/C++Builder 10.3.3 Rio iOS Linking Patch

RAD Studio/Delphi/C++Builder 10.3.3 RioのiOS Linking Patchがリリースされています。これはiOSアプリケーションをDebugビルドでリンクしようとするとエラーになる問題(RSP-23698)を解決するものです。

30900 RAD Studio 10.3.3 iOS Linking Patch

2019年12月1日

2019/12開催のセミナー

2019年11月21日

RAD Studio/Delphi/C++Builder 10.3 Rio Release 3 (10.3.3)

RAD Studio/Delphi/C++Builder 10.3 RioのRelease 3 (10.3.3)がリリースされています。インストールには有効なUpdate Subscriptionが必要です(Community Editionを除く)。また同時にpatchもリリースされています。

30893 RAD Studio, Delphi, C++Builder 10.3.3 Web Install
30896 RAD Studio, Delphi, C++Builder 10.3.3 ISO

30899 RAD Studio 10.3.3 iOS 13 Dark Theme Patch

10.3 Rio - リリース 3 - RAD Studio (en)

New features and customer reported issues fixed in RAD Studio 10.3.3 - RAD Studio

RAD Studio 10.3.3 Now Available, Learn More
Delphi 10.3.3 is Available
RAD Studio 10.3.3: Delphi Android 64-bitサポート (en)
RAD Studio 10.3.3: iOS 13およびmacOS Catalinaサポート (en)
Enterprise Connectors in RAD Studio 10.3.3 Enterprise & Architect Edition
RAD Studio 10.3.3: IDEの改善 (en)
Delphi / C++Builder / RAD Studio 10.3.3 のリリースとキャンペーンのお知らせ
RAD Studio 10.3.3で解決されたIBXの問題 (en)

DelphiのLinux Dockerサポートを使ってみよう (en)
Linux DockerによるRAD Serverの配置 (en)

Workarounds:

2019年11月1日

[書籍]IT業界の病理学

紀伊國屋書店新宿本店

IT業界の病理学 (Amazon)/司馬紅太郎、秋山浩一、森龍二、鈴木昭吾、都築将夫、堀明広、佐々木誠、鈴木準一著/技術評論社/ISBN 978-4-297-10857-1/1,848円

を購入。

2019/11開催のセミナー