共通デスクトップ環境 プログラマ概要

共通デスクトップ環境の Motif ウィジェット・バイナリの互換性のガイドライン

すでにサブクラス化したウィジェットのデータ構造体サイズに依存する標準 Xt API を使用して実装するウィジェット・サブクラスは、Motif または共通デスクトップ環境の新バージョンとの互換性がない可能性があります。Motif の新バージョンのスーパークラスに新規フィールドが追加されている可能性があるからです。たとえば Motif 2.0 の XmManager および XmPrimitive クラスに新規フィールドが追加されています。

サブクラスは、ウィジェット・インスタンスの開始アドレスに関連して指定されたインスタンス・フィールドに対するコンパイルされたリファレンスを持つので、非互換が起こります。スーパークラス・インスタンス構造体を拡張したウィジェットを持つ新しい Motif ライブラリをインストールした場合に、コンパイルされたリファレンスは間違ったメモリの場所を指します。

このような問題を避けるため、Motif にはリソースを定義する機能と、インスタンスおよびウィジェットの全構造体の代わりにウィジェットの部分構造体の先頭 (アドレス) に関連する制約構造体にあるすべてのフィールドを参照できるようにするウィジェット・フィールドへアクセスする機能があります (ウィジェットの全構造体は、スーパークラス部分構造体を含みます) 。ウィジェット・クラスを最初に初期化したとき、この機能はこれらの関連するリファレンスを実行時に解決します。そのため、現在リンクされている Motif ライブラリから読み取る、ウィジェットのスーパークラス・インスタンス構造体のサイズを計算に入れます。


注 -

サブクラス化を実装する場合、アプリケーションと共通デスクトップ環境の今後のリリースとのバイナリ互換可能なものにするには、必ず Motif リファレンスの解決機能を使用してください。


この Motif 機能に関する詳細は、Motif 1.2 の XmResolvePartOffsets(3x) および XmResolveAllPartOffsets(3x) のマニュアル・ページと、『Motif 2.1 Programmer's Reference』を参照してください。ソースコード例は /usr/dt/examples/motif/dogs にあります。