2014年9月19日

2014年9月10日

Microsoft Monthly Update 2014/09

今日はMicrosoftのセキュリティアップデートの日です。
MS14-052
MS14-053
MS14-054
MS14-055

2014年9月6日

IDE Fix Pack 5.71

Andreas HausladenさんIDE Fix Pack for XE7がアップデートされてVersion 5.71となっています。XE7で関数名のマングリングルールが変更されていたのに対応するのを忘れていたとのことで、これを修正するとともにXE7で修正されて不要になったパッチを3つ削除したとのことです。

IDE Fix Pack 5.71 for XE7 – bug fix release | Andy's Blog and Tools

2014年9月3日

DelphiのRTLで定義済の属性

Delphi 2010で追加された新しいRTTIに含まれる属性機能ですが、Delphiのバージョンにより違いがあるものの、RTLで予め定義されている属性がいくつかあります。ところがこれらの定義済の属性についてヘルプにはきちんとした記述がありません。ということで調べてみました(XE6/XE7は手元にないので調べていませんが、既存のものについてはXE5と大きく異なる部分はないと思いますDelphi XE6/XE7/XE8/10 Seattle/10.1 Berlinについても確認しました)。

  • System ユニット
    TCustomAttribute
    [2010..10.1 Berlin]カスタム属性のルートクラス
    属性を新たに定義するときはTCustomAttributeから派生させる
    WeakAttribute [Weak]
    [XE3..10.1 Berlin]循環参照などのARCがオブジェクトの破棄を行えないような状況を防ぐ"弱い"参照であることを示す
    10 Seattleおよびそれ以前ではNEXTGENコンパイラのみ
    参考: 弱い参照 (Delphi モバイル コンパイラでの自動参照カウント)
    UnsafeAttribute [Unsafe]
    [XE3..10.1 Berlin]オブジェクトの生成時など参照カウントが0となるような状況でARCによる破棄を防ぐ
    10 Seattleおよびそれ以前ではNEXTGENコンパイラのみ
    参考: Unsafe 属性 (Delphi モバイル コンパイラでの自動参照カウント)
    参考: モバイル開発のためのDelphi言語 (ホワイトペーパ)
    RefAttribute [Ref]
    [XE3..10.1 Berlin]定数パラメータを強制的に参照渡しにする
    ヘルプによればRefAttributeはXE4の新機能だが、実際にはXE3でも使用可能
    参考: 定数パラメータ (パラメータ(Delphi))
    VolatileAttribute [Volatile]
    [XE4..10.1 Berlin]スレッドによって書き換えられる可能性があるフィールドに対して、コード生成時にレジスタまたはその他の一時メモリ領域に値をコピーするような最適化を行わないようにする
    10 Seattleおよびそれ以前ではNEXTGENコンパイラのみ
    参考: Delphi コンパイラの新しい属性 (Delphi XE4 および C++Builder XE4 の新機能)
    参考: volatile (コンパイラ属性)
    StoredAttribute [Stored]
    [XE7..10.1 Berlin]System.Classes.StoredAttributeを参照
    HPPGENAttribute [HPPGEN]
    [XE8..10.1 Berlin]C++Builder用のhppファイル生成時に使用する情報らしいが詳細不明
    HFAAttribute [HFA]
    [XE8..10.1 Berlin]pageId=86770118(なにそれ)に情報があるらしいが詳細不明(For internal use only.とコメントあり)ARM64プラットフォーム向けにレコード型/配列型に対して生成されたRTTI HFA情報をオーバライド
    AlignAttribute [Align]
    [10 Seattle..10.1 Berlin]メモリ上のオブジェクトのアライメントを指定するものらしいが、For internal use only.とコメントあり

  • System.Classes ユニット
    ComponentPlatformsAttribute [ComponentPlatforms(<params>)]
    [XE2..10.1 Berlin]コンポーネントが動作するプラットフォームを指定する
    パラメータ(Word値)にはSystem.Classesで定義されている以下の定数の論理和を指定する
    • pidWin32 [XE2..10.1 Berlin]
    • pidWin64 [XE2..10.1 Berlin]
    • pidOSX32 [XE2..10.1 Berlin]
    • pidiOSSimulator [XE3..10.1 Berlin]
    • pidAndroid [XE3..10.1 Berlin]
    • pidLinux32 [XE3..10.1 Berlin]
    • pidiOSDevice32 [XE8..10.1 Berlin], pidiOSDevice [XE3..10.1 Berlin]
    • pidLinux64 [XE8..10.1 Berlin]
    • pidWinNX32 [XE3..10.1 Berlin]
    • pidWinIoT32 [XE8..10.1 Berlin] ("Embedded IoT (Internet of Things) Windows w/ Intel Galileo")
    • pidiOSDevice64 [XE8..10.1 Berlin]
    • pidWinARM [10 Seattle..10.1 Berlin]
    • pidOSX64 [10.1 Berlin], pidOSXNX64 [10.1 Berlin]
    • pidLinux32Arm [10.1 Berlin]
    • pidLinux64Arm [10.1 Berlin]
    • pidAndroid64 [10.1 Berlin]
    TDefaultAttributeBase
    [XE3..10.1 Berlin]DefaultAttribute/NoDefaultAttributeの継承元
    DefaultAttribute [Default(<param>)]
    [XE3..10.1 Berlin]プロパティの格納指定子defaultと同等の指定
    パラメータにはデフォルト値(Boolean型、AnsiChar型、Char型、Integer型、Cardinal型、Int64型、UInt64型、String型、Extended型のいずれか)を指定する
    NoDefaultAttribute [NoDefault]
    [XE3..10.1 Berlin]プロパティの格納指定子nodefaultと同等の指定
    StoredAttribute [Stored(<param>)]
    [XE3..XE7]プロパティの格納指定子storedと同等の指定
    パラメータには真偽値(False | True)またはストレージハンドラ(Boolean型のプロパティまたはパラメータを持たずBoolean値を返すメソッド)の名前を指定する(XE8以降はSystemユニットに移動)
    ObservableMemberAttribute [ObservableMember(<param>)]
    [XE3..10.1 Berlin]LiveBinding対応コンポーネントで、LiveBindingコンポーネントが式を生成するときに使用するメンバ名をパラメータで指定する

  • Data.DBXJSONReflect ユニット (XE5でREST.JsonReflect ユニットに置き換えられた)
    JsonReflect [JsonReflect(<params>)]
    [XE..10.1 Berlin]TJSONMarshal/TJSONUnMarshalでオブジェクトをJSON形式でマーシャル/アンマーシャルするときの動作をカスタマイズする
    パラメータにはコンバータタイプ、リバータタイプ、インターセプタの型、ポピュレーションカスタマイザの型、マーシャリングのときに生成される中間オブジェクトを自動的に解放するかどうかを指定する
    JSONBooleanAttribute
    [XE..10.1 Berlin]JSONMarshalled/JSONOwnedの継承元
    JSONMarshalled [JSONMarshalled(<param>)]
    [XE..10.1 Berlin]フィールドや型がマーシャル/アンマーシャルの対象になるかどうかをパラメータ(False | True)で指定する
    JSONOwned [JSONOwned(<param>)]
    [XE..10.1 Berlin]フィールドがアンマーシャルの際に解放されるかどうかをパラメータ(False | True)で指定する

  • Datasnap.DSAuth ユニット
    TRoleAuth [TRoleAuth(<params>)]
    [XE..10.1 Berlin]DataSnapで認証を行ったときに、サーバメソッドクラスやサーバメソッドに対してアクセスを許可/拒否するロールを指定する
    パラメータには許可ロールのリストと拒否ロールのリストを指定する
    参考: ロール (認証と権限付与)

  • REST.Json.Types ユニット
    JSONBooleanAttribute [JSONBoolean]
    [XE6..10.1 Berlin]Data.DBXJSONReflect.JSONBooleanAttributeを参照
    JSONMarshalledAttribute [JSONMarshalled]
    [XE6..10.1 Berlin]Data.DBXJSONReflect.JSONMarshalledを参照
    JSONOwnedAttribute [JSONOwned]
    [XE6..10.1 Berlin]Data.DBXJSONReflect.JSONOwnedを参照
    JSONNameAttribute [JSONName]
    [XE6..10.1 Berlin]Data.DBXJSONReflect.JSONOwnedを参照

  • REST.JsonReflect ユニット
    JsonReflect(XE5)/JsonReflectAttribute(XE6以降) [JsonReflect]
    [XE5..10.1 Berlin]Data.DBXJSONReflect.JsonReflectを参照(XE6でクラス名が変更)
    JSONBooleanAttribute [JSONBoolean]
    [XE5]Data.DBXJSONReflect.JSONBooleanAttributeを参照(XE6以降はREST.Json.Typesユニットに移動)
    JSONMarshalled [JSONMarshalled]
    [XE5]Data.DBXJSONReflect.JSONMarshalledを参照(XE6以降はREST.Json.Typesユニットに移動)
    JSONOwned [JSONOwned]
    [XE5]Data.DBXJSONReflect.JSONOwnedを参照(XE6以降はREST.Json.Typesユニットに移動)

  • EMS.ResourceType ユニット
    ResourceSuffixAttribute [ResourceSuffix]
    [XE7..10.1 Berlin]EMSでURLのサフィックスを指定する
    参考: EMS リソースの概要 - RAD Studio
    ResourceNameAttribute [ResourceName]
    [XE7..10.1 Berlin]EMSでリソース名を指定する
    参考: EMS リソースの概要 - RAD Studio
    EndpointNameAttribute [EndpointName]
    [XE7..10.1 Berlin]EMSでエンドポイントメソッド名を指定する
    参考: EMS リソースの概要 - RAD Studio
    TResourceCustomAttribute [TResourceCustom]
    [10.1 Berlin]EndPointRequestSummaryAttribute/EndPointRequestParameterAttribute/EndPointResponseDetailsAttribute/EndPointObjectsYAMLDefinitionsAttribute/EndPointObjectsJSONDefinitionsAttributeの継承元
    EndPointRequestSummaryAttribute [EndPointRequestSummary]
    [10.1 Berlin]EMSでメソッドの説明をAPIドキュメント上に生成する
    参考: カスタム API ドキュメント - RAD Studio
    EndPointRequestParameterAttribute [EndPointRequestParameter]
    [10.1 Berlin]EMSで要求内で使用されるパラメータの説明をAPIドキュメント上に生成する
    参考: カスタム API ドキュメント - RAD Studio
    EndPointResponseDetailsAttribute [EndPointResponseDetails]
    [10.1 Berlin]EMSで要求応答の説明をAPIドキュメント上に生成する
    参考: カスタム API ドキュメント - RAD Studio
    EndPointObjectsYAMLDefinitionsAttribute [EndPointObjectsYAMLDefinitions]
    [10.1 Berlin]EMSでYAML版のオブジェクトの定義をAPIドキュメント上に生成する
    参考: カスタム API ドキュメント - RAD Studio
    EndPointObjectsJSONDefinitionsAttribute [EndPointObjectsJSONDefinitions]
    [10.1 Berlin]EMSでJSON版のオブジェクトの定義をAPIドキュメント上に生成する
    参考: カスタム API ドキュメント - RAD Studio

  • Macapi.ObjectiveC ユニット
    MethodNameAttribute [MethodName]
    [XE4..10.1 Berlin]Delphiで定義したObjective-Cのメソッドに対して、Objective-C上の本来のメソッド名を指定する

  • Androidapi.JNIBridge ユニット
    JavaSignatureAttribute [JavaSignature]
    [XE5..10.1 Berlin]Delphiで定義したAndroid(JNI)のクラス(インタフェース)に対して、Android上の本来のクラス名を指定する

  • System.Win.WinRT ユニット
    WinRTClassNameAttribute [WinRTClassName]
    [10 Seattle..10.1 Berlin]Delphiで定義したWinRT APIのインタフェースに対して、WinRT上の本来のクラス名を指定する
Delphiのバージョンごとの違い:
  • Delphi 2010ではシステムで使用する定義済の属性はない。
  • Delphi XEではDataSnap関係でTRoleAuthと、DBX関係でJSONリフレクションのためのJSON...が定義された。
  • Delphi XE2ではマルチプラットフォーム対応のためにComponentPlatformsAttributeが定義された。
  • Delphi XE3ではARC対応としてWeakAttribute/UnsafeAttribute/RefAttributeが、またおそらく将来の旧RTTIから新RTTIへの移行のためにTDefaultAttributeBase/DefaultAttribute/NoDefaultAttribute/StoredAttributeが、LiveBinding対応のためにObservableMemberAttributeが、それぞれ定義された。
  • Delphi XE4ではiOS対応としてMethodNameAttributeが定義された。
  • Delphi XE5ではJSONのリフレクションがDBXから分離されたためData.DBXJSONReflectのJSON...がREST.JsonReflectにも再定義され、Android対応としてJavaSignatureAttributeが定義された。
  • Delphi XE6ではREST.JsonReflect.JsonReflectがREST.JsonReflect.JsonReflectAttributeにクラス名が変更され、JsonReflectAttribute以外のJson...の定義がREST.JsonReflectユニットからREST.Json.Typesユニットに移動した。
  • Delphi XE7ではStoredAttributeの定義がSystem.ClassesユニットからSystemユニットに移動し、EMSのためにResourceSuffixAttribute/ResourceNameAttribute/EndpointNameAttributeが定義された。
  • Delphi XE8ではHPPGENAttributeとHFAAttributeが定義された。
  • Delphi 10 SeattleではAlignAttributeとWinRTClassNameAttributeが定義された。
  • Delphi 10.1 Berlinでは全てのコンパイラで[weak][unsafe][volatile]属性がサポートされるようになった(10 Seattle以前はNEXTGENコンパイラのみ)。またEMS APIリソースの取得で使用するカスタムAPIドキュメント用のTResourceCustomAttribute/EndPointRequestSummaryAttribute/EndPointRequestParameterAttribute/EndPointResponseDetailsAttribute/EndPointObjectsYAMLDefinitionsAttribute/EndPointObjectsJSONDefinitionsAttributeが定義された。
なおUnsafe属性のようにメソッドの戻値に属性を指定したい場合は、メソッドの宣言の前に[Result: <attr>]をつけて、
[Result: Unsafe]function Foo: TObject;
のようにします。

2015/06/19追記: Delphi XE6/XE7/XE8に関する情報を追加。

2015/10/05追記: Delphi 10 Seattleに関する情報を追加。

2016/05/02追記: Delphi 10.1 Berlinに関する情報を追加。

2014年9月1日

2014/09開催のセミナー

  • Web Seminar
    • 2014/09/02 15:00-20:00(JST) Webセミナー「RAD Studio次期バージョンいよいよ登場!」
      • 15:00 次期バージョンブリーフィング
      • 15:45 新バージョンの機能を活用するための無料トレーニング◆FireMonkeyフレームワーク基礎
      • 16:15 デブサミ関西先取り情報◆アトラシアンオフィス訪問
      • 16:30 新バージョンの機能を活用するための無料トレーニング◆データアクセス基礎
      • 17:00 デベロッパーTV◆RAD Studio新バージョン特集
      • 18:00 デブサミ関西先取り情報◆もう怖くないモバイルアプリ開発
      • 18:15 新バージョンの機能を活用するための無料トレーニング(再)◆FireMonkeyフレームワーク基礎
      • 18:45 デブサミ関西先取り情報(再)◆アトラシアンオフィス訪問
      • 19:00 エヴァンジェリスト高橋RAD Studio新バージョン徹底デモ
    • 2014/09/17 16:30-19:30(JST) RAD Studio XE7 Webセミナーマラソン「2」「RAD Studio新バージョンの特長総ざらい」
      • 16:30 高橋智宏のDelphi / C++Builder 新機能解説(1) - 最新ライブラリ/言語機能の活用
      • 16:55 お知らせ◆iTuneカードやエンバカデログッズが当たるキーワードを発表
      • 17:00 デベロッパーTV番外編◆大阪から中継!
      • 18:00 高橋智宏のDelphi / C++Builder 新機能解説(2) - データベースアクセスとサーバーサイド開発
      • 18:25 お知らせ◆iTuneカードやエンバカデログッズが当たるキーワードを発表
      • 18:30 伊賀敏樹のシステム設計指南 - みんなDBスキーマ設計どうやってるの?
      • 18:55 お知らせ◆iTuneカードやエンバカデログッズが当たるキーワードを発表
      • 19:00 高橋智宏のDelphi / C++Builder 新機能解説(3) - モバイルアプリ開発 基礎から応用まで
      • 19:25 お知らせ◆iTuneカードやエンバカデログッズが当たるキーワードを発表
  • Live Seminar