Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> Install Shield >> Install Shield スクリプト言語 (6) 関数

Install Shield スクリプト言語 (6) 関数

(a) Rulファイル

  スクリプトは、rulファイルに記述します。
  構造は以下の通りになります(Install Shield 5.5の頃です)。

 

■ Rulファイル(旧形式)

// ヘッダのインクルード
#include "abc.h"

// プロトタイプ宣言
prototype LONG Func1();
prototype Func2(BYREF STRING);
....

// グローバル変数宣言
int a;
NUMBER b;
STRING c[512];

// メイン(ここから呼び出される)
program

....

endprogram

// プロトタイプ宣言した関数群
function Func1()
    // 関数内変数宣言
    NUMBER n;
// beginからendまでにソースを記述
begin
    n=5;
    return n;
end;

function Func2(szString)
begin
    szString="ABCDE";
end;

// 自作スクリプトファイルをインクルードします。
#include "abc.rul"


  ヘッダファイル(*.h)には、プロトタイプ宣言を記述し、ヘッダのインクルードはスクリプトの先頭に記述します。
  逆にスクリプトファイル(*.rul)には、ソースを記述し、スクリプトのインクルードは最後に記述します。
  Cと似ています。


Install Shield 12での注意点
  古い Install Shield とは異なり、新しいInstall Shield (Install Shield 12など)では、下記2点が大きく異なります。
    1. OnFirstUIBefore () のような定義済みのイベントは、プロトタイプ宣言がいらないようになりました。
    2. program...endprogram スタイルで 1から書く必要がなくなりました。

  つまり、ウィザード形式で、関数を生成し、ユーザーはそこに命令を追加するだけでよくなったのです。

(b) 構文

  関数は、CやPascalと同様、プロトタイプ宣言をした後、関数を記述します。以下、例です。

 

■ 関数 (Cと構文の比較)

/*
    Cでは、以下のように記述しますが、

    // プロトタイプ宣言
    long FuncA(long);

    // 関数の実体
    long FuncA(long b)
    {
        long a;
        a=1L+b;
        return a;
    }
*/

// Install Shieldでは、以下のように記述します。

// プロトタイプ宣言
prototype LONG FuncA(LONG);

// 関数の実体
function FuncA(b)
    long a;
begin
    a=1+b;
    return a;
end;

■ 関数 (戻り値なしの例)

// プロトタイプ宣言
prototype FuncC();

// 関数の実体
function FuncC()
begin
    MessageBox("FuncC",0);
end;

 

  引数で参照渡しをしたい場合は、Visual Basicと同様に、引数にBYREFを指定します。
  ただし、プロトタイプ宣言にのみ記述します。

 

■ 関数 (参照渡し)


// プロトタイプ宣言
prototype FuncD(BYREF STRING);
prototype FuncE(STRING);

// グローバル変数
STRING szStr[64];

// 関数の実体
function FuncD(szString)
begin
    // szStringはアドレスを持っているため、
    // そのアドレスのあるところにszStringを書き込むので、
    // 関数外部でも"123"となる。
    szString="123";
end;

function FuncE(szString)
begin
    // 参照でないので、この関数内部でのみszStringは"AAA"となる。
    szString="AAA";
end;

// 参照渡しのテスト
function a()
    STRING szStr;
begin
    // ... 省略 ...
    szStr="123456";

    FuncD(szStr);
    MessageBox(szStr,0);// szStrは"123"になります。

    FuncE(szStr);
    MessageBox(szStr,0);// szStrは"123"のままです。
    // ... 省略 ...
end;


  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita