Jenkins 用 RAD Studio Plugin

過去記事を調べてみたらブログには書いてなかったことに気づいたので、改めて RAD Studio Plugin を紹介しておきます。

このプラグインの機能は、RAD Studio (Delphi もしくは C++Builder) のプロジェクトを簡単にビルドできるようにするだけです。必要な環境変数の設定は RAD Studio コマンド プロンプト用のバッチファイルから読み取るので、RAD Studio 各バージョンのインストール先をそれぞれ設定しておけば、ビルドに利用するバージョンを選択して、プロジェクトファイルと MSBuild のコマンド スイッチを指定するだけで、ビルドすることができます。もうバッチ ファイルで細工する必要ありません。

もし役に立つと感じたら、フィードバックをいただけるとありがたいです。

RAD Studio に対するスタンス

これまたどうでもよい話ですが、私の RAD Studio に対するスタンスについて釈明しておきます。

一応公言しているつもりですが、私はオープンソース推進派ですので、原則としてはオープンソースでないソフトウェア利用は避けたいと考えています。それではなぜ RAD Studio を使うのかといえば、見栄えのする GUI を簡単に作成できるオープンソースのツールに適当なものがなかったからに過ぎません。JavaFX があるじゃないかと指摘されるかもしれませんが、JRE への依存性を考えるとためらわざるを得ないというのが正直なところです。

RAD Studio でも Delphi ではなく C++Builder をメインにしているのも、C++ であれば別の環境への移植が容易だろうという判断によります。RAD Studio を利用する上では Delphi でやった方が簡単なことはいくつもあります (インターフェース定義等) が、ほかに Object Pascal の使えるオープンソースのツールがない以上は C++ 以外の選択は現在のところ考えられません。

そんなわけで、個人的に RAD Studio のコア部分についてはオープンソース化してもらえると、バグ修正などでフィードバックができるようになって大変ありがたいのですが、今の状況を見るとまずあり得ないでしょうねえ。

C++Builder & VCL でリストビューにソート順アイコン表示

C++Builder の VCL アプリケーションで、ソート可能なリストビューのヘッダーにソート対象カラムとソート順を示すアイコンを表示させる方法を調べたのでまとめてみる。

問題は、VCL にリストビュー内のヘッダーコントロールを取得する手段がないというところで、仕方ないので Win32 API から以下を利用する。

  • ListView_GetHeader() – ヘッダーコントロールのハンドル取得
  • Header_GetItemCount() – アイテム数取得
  • Header_GetItem() と Header_SetItem() – アイテム情報の取得と変更

使ったところは次のような感じ。

https://bitbucket.org/kazssym/dmolist/src/8038d1e15d6f400d3f4fdb049355c84ddda9a462/src/Main.cpp?at=default#cl-127

ここが変だよ! #Embarcadero C++Builder (part 2)

今回は不具合ではなくて言語仕様の話をしようと思う。

C++Builder では Delphi のクラスを使えるように拡張されているが、元々異なるものをくっつけたのでちぐはぐになっているという一例がこれ。

Link: C  Builder VCL でのオブジェクト生成 – RAD Studio.

Delphi (Object Pascal)  のクラスでは、最派生クラスのコンストラクターがまず呼び出されて、そこから基底クラスのコンストラクターを入れ子的に呼び出す仕組みなのに対して、C++ では基底クラスのコンストラクターから順に呼び出されるという言語仕様なので、呼び出される順番が異なる―というわけで、木に竹を接いだらこうなりましたというすごい仕様になっていたりする。

ここが変だよ! #Embarcadero C++Builder

C++Builderプロジェクトでmem.hというヘッダーファイルを作ると大変という話。

C++Builderでは,memcpyやmemsetといったCの標準ライブラリー関数を<mem.h>で宣言していて,<string.h>から間接的にインクルードしているのだが,このせいでユーザーがプロジェクトでmem.hというヘッダーファイルを作ると,そちらが使われてしまってmem*系の関数が宣言されないという困ったことになってしまうのである。

Link: mem.h – RAD Studio XE3.

続きを読む →

C++Builder XE FAQより

C++Builder XEの製品情報が公開されたので、FAQを流し読みしてみた。

  • XEを買えば、C++Builder 6以降の各バージョンも使えるらしい。
  • Blackfish SQLはもう付いてこないらしい。代わりはInterBase。

COM書くのにATL不要になったらしいので、今回はアップグレードするつもりだけど、1年以内に64ビット対応するか不明なので、年間サポートはなしにするかな。

リンク: C++Builder FAQ | RAD C   IDE and Compiler.