JMPスクリプト言語(JSL)によって、DLLをロードし、そのDLLに含まれている関数を呼び出すことができます。DLLの呼び出しを行うJSL関数が1つと、メッセージが6つあります。
dll_obj = Load DLL("path" <, AutoDeclare(Boolean | Quiet | Verbose) |Quiet | Verbose > )
Load DLL()は、パス(path)で指定されたDLLをロードします。ログウィンドウにメッセージが表示されないようにするには、AutoDeclare(Quiet)引数を使用します。
メモ: 64ビット版のJMPは32ビットDLLがロードできません。32ビットDLLは、あらかじめ64ビット版でロードできるように再コンパイルしておく必要があります。
DLLで定義される関数の引数や戻り値のタイプを宣言するには、Declare Functionメッセージを使用します。関数を宣言すると、呼び出せるようになります。
dll_obj <<Declare Function("name", Convention(named_argument), Alias("string"), Arg(type, "string"), Returns(type), other_named_arguments)
Aliasは、JSLで使用できる代替の名前を定義します。たとえば、DLL内の"Message Box"という関数に対して、Alias("MsgBox")を宣言した場合、その関数を次のようにも呼び出せるようになります。
result = dll_obj <<MsgBox(...)
Conventionの名前付き引数には次のようなものがあります。
• STDCALLまたはPASCAL
• CDECL
ArgとReturnsのtype引数には次のいずれかを指定します。
Int8 |
UInt8 |
Int16 |
UInt16 |
Int32 |
UInt32 |
Int64 |
UInt64 |
Float |
実数(double) |
AnsiString |
UnicodeString |
Struct |
IntPtr |
UIntPtr |
ObjPtr |
Declare Functionメッセージの引数については、『スクリプト構文リファレンス』のダイナミックリンクライブラリ(DLL)を参照してください。
最後に、UnLoadDLLメッセージでDLLをアンロードします。
dll_obj << UnLoadDLL
メモ: 関数を宣言するときは、DLLの作成者によって提供された関数のマニュアルを参照してください。引数の種類や呼び出し方法がDLL内の実際の関数に合わない場合、JMPが終了してしまう可能性があります。
次の例は、DLLに含まれているnetPresentValueという関数が、4つのパラメータを取っている場合の例です。Declare Function()でこれらのパラメータと関数が戻すデータのタイプを定義することにより、JMPが関数を呼び出せるようにしています。
xftdll = Load Dll( "c:\ExtFunctionTests\ExtFunctionTests_x64.dll" ),
Show( xftdll );
xftdll << Declare Function(
"netPresentValue",
Convention( CDECL ),
Alias( "npv" ), // JMPでこの名前を使って関数を呼び出す
Arg( Double, "割引率" ),
Arg( Double, "期間あたりのキャッシュフロー" ),
Arg( Int32, "キャッシュフロー数" ),
Arg( Double, Array, "キャッシュフロー値の配列" ),
Returns( Double )
);
result = xftdll << npv( 0.10, 1, 10, [ 100, 100, 100, 100, 100,
100, 100, 100, 100, 100 ]
);
Show Functionsメッセージは、Declare Function()で宣言された関数をすべてログに送ります。
dll_obj << Show Functions;
独自のDLLを作成するときには、DLL内にJSLの関数宣言スクリプトを用意しておくことができます。
Get Declaration JSLメッセージは、DLL内の関数宣言スクリプトをログに送ります。
dll_obj << Get Declaration JSL;