3GL プログラムのルールとガイドライン
ユーザー定義組み込み関数のコーディングする際は、以下のルールとガイドラインを守るようにしてください。
- 接頭辞 X_、V_、U_ を変数や値の定義 (#define) で使用しないでください。
- 変数名や定義 (#define) する名前が、X_GLODEF.H 、X_GLOUSR.H 、X_BIF000.H で定義されている名前やタイプと競合するのを避けるようにしてください。
- すべての U_BIFnnn.DLL は、実行時に ....\x_lansa\execute ディレクトリ内に存在していなければなりません。
- Visual LANSA のタイプ定義変数 X_SHORT、X_LONG、X_DOUBLE、X_CHAR、X_VCHAR を使って、可能な場合はできるだけ組み込み関数内に作業スペースを定義するようにしてください。また、X_PSHORT、X_PLONG、X_PDOUBLE、X_PCHAR、X_PVCHAR を同タイプのポインターの宣言として使用することもできます。
- できる限り VISUAL LANSA 変数の接頭辞を使用してください。例:
X_SHORT に対する接頭辞は s です。
X_LONG に対する接頭辞は l です。
X_DOUBLE に対する接頭辞は d です。
X_CHAR に対する接頭辞は c です。
X_VCHAR に対する接頭辞は vch です。
ポインター に対する接頭辞は p です。
配列 に対する接頭辞は a です。
接頭辞は重ねて使用することも可能です。ですから、"apsOperation" は、"Operation" という変数は X_SHORT (s) へのポインター (p) の配列 (a) であることを示しています。
同様に "pvchName" は、"Name" を含む X_VCHAR 変数 (vch) のポインターのことです。 - 組み込み関数の引数変数を送受信は、可能な限り U_BIF マクロを使用するようにしてください。これらのマクロを利用することで、将来 Viaual LANSA のコード生成テクニックに変更があったとしても、自身のアプリケーションへの影響を最小限に抑えることができます。
- 組み込み関数は 1 つにつき、1 つの C ソース・ファイル、1 つの DLL に対応するようにしてください。 このルールを守ることで、その他のプラットフォームへのコード移植がずっと簡単になります。マルチエントリ・ポイントの DLL (もしくは共有オブジェクト) は、Linux システムによっては対応が非常に難しい場合がありますので、後に組み込み関数を移植することになった場合に、このような問題に出くわさないようにします。
- ユーザー定義組み込み関数の参照の多くは、Visual LANSA より提供されている様々な .H ヘッダー・ファイルです。このヘッダー・ファイルは変更しないようにしてください。このファイルはVisual LANSA が新しくインストールされる度に置換され、加えた変更は失われてしまいます。
- ユーザー定義組み込み関数には以下の引数が含まれています。
struct X_IDS *pX_Ids,
struct X_PRO *pX_Pro,
struct X_FUN *pX_Fun,
struct X_BIF *pX_Bif,
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f4e8a272-740b-44e9-b3e2-ee6e64f0cafb"><ac:plain-text-body><![CDATA[
struct X_FLD X_Fld[],
]]></ac:plain-text-body></ac:structured-macro>
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f4315075-1708-40d4-ab24-2e563237adaf"><ac:plain-text-body><![CDATA[
struct X_LIST X_List[],
]]></ac:plain-text-body></ac:structured-macro>
X_SHORT sInCount,
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="1ba5fc43-420a-423e-abda-4a86be167da4"><ac:plain-text-body><![CDATA[
X_SHORT sInVec[],
]]></ac:plain-text-body></ac:structured-macro>
X_SHORT sRetCount,
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="7fed5eb7-3093-462f-bbe4-d5b2ae2224db"><ac:plain-text-body><![CDATA[
X_SHORT sRetVec[]
]]></ac:plain-text-body></ac:structured-macro>
これらの引数のいずれかを指すストレージを修正すると、U_BIF マクロを除き、予期せぬ結果を招き、アプリケーション・エラーにつながる可能性があります。U_BIF マクロ使用時以外は、ファンクションが直接扱う範囲外のストレージを変更しないようにしてください。このルールを守らなかった場合、アプリケーションの整合性が失われ、将来互換性の問題につながる可能性があります。