9.6.1 CallDllDLLファイルを呼び出す

機能
DLLファイルを呼び出します。
形式

CallDll ( DllFileName , FunctionName , Param1 , Param2 , … )

指定項目
DllFileName
DLLファイル名を,文字列,または値を格納した変数名で指定します。
FunctionName
呼び出す外部関数名を,文字列,または値を格納した変数名で指定します。
Param132
関数のパラメタを,文字列,または値を格納した変数名で指定します。
複数のパラメタを指定できます。
JP1/Script 06-00以降では,複数のパラメタを一つずつ格納した配列変数を変数名で指定することもできます。
説明
指定されたDLLをロードし,外部関数をコールします。コマンドが正常に実行された場合は真(True)を,エラーが発生した場合は偽(False)を,コマンドの実行結果として返します。
外部関数は次のインタフェースにしてください。また,モジュール定義ファイル(.DEF)のEXPORTSセクションに外部参照宣言が必要になります。
宣言

BOOL  WINAPI  MyFunc( HWND hParent, int argc, char * argv[], int * rtnc, char * * rtnv[] );

引数

HWND  hParent;   ' 親ウィンドウのハンドル
int  argc;   ' スクリプトから渡されるパラメタの数
char *  argv[];   ' スクリプトから渡されるパラメタの配列
int *  rtnc;   ' スクリプトに返す文字列の数を格納するポインタ
char * * rtnv[];   ' スクリプトに返す文字列の配列を格納するポインタ

戻り値
外部関数MyFuncの戻り値は_DLL_RTN_予約変数に格納します。_DLL_RTN_予約変数がTrueの場合,引数rtnに格納されたスクリプトに返す文字列の配列はスクリプト上で_RTNxx_予約変数を使って参照できます。 xxは00から順に引数rtncに格納された数だけ割り振られます。外部関数MyFuncの戻り値がFalseの場合,_RTNxx_予約変数は定義されません。
スクリプトに返す文字列,および文字列配列は,関数終了後も参照できるように,関数のスコープ内のローカルバッファには格納しないでください。

' TEST.DLLの関数部分(Favorite.c)
#include "windows.h"

#define  FAV_SPORT1 "SKI"
#define  FAV_SPORT2 "BASKETBALL"
#define  FAV_FOOD1  "STEAK"
#define  FAV_FOOD2  "PASTA"
char *  g_ret[2];

BOOL  WINAPI  GetFavorite( HWND hParent, int argc, char * argv[], int * rtnc, char ** rtnv[] )
{
 if (lstrcmp(argv[0], "SPORT") == 0)
 {
   g_ret[0] = FAV_SPORT1;
   g_ret[1] = FAV_SPORT2;
 }
 else if (lstrcmp(argv[0], "FOOD") == 0)
 {
   g_ret[0] = FAV_FOOD1 ;
   g_ret[1] = FAV_FOOD2;
 }

 *rtnc = 2;
 *rtnv = g_ret;

 return ( TRUE );
}

' スクリプト側の処理(abc.SPT)
Dim  Quest
Quest = "SPORT"
CallDll(_BIN_+"TEST.DLL" ,"GetFavorite" ,Quest)
Dim  Msg
Msg = "私の好きな"+Quest+"は"+_RTN00_+"と"+_RTN01_+"です"
MessageBox(Msg ,OK,,Information)
Exit(0)

対象バージョン
JP1/Script 01-00以降