次へloadlib関連命令とllmodモジュールまずは、loadlib関連命令とllmodモジュールで使われる命令群を簡単に説明しておきましょう。APIやその他のDLL関数を呼び出すために必要な機能を提供しています。2.55以前)では、これらの命令はtomさんによって開発・公開されていた拡張プラグインloadlib.dllで提供されていたものでした。APIがHSPで広く使われるようになってきたため、これらの命令が標準命令として実装されたのです。loadlib関連命令は、主に次のような機能を提供しています。メモリアクセス機能HSPで使われている変数を指すメモリアドレスを取得する。任意のメモリアドレスへデータを読み書きする。他のDLLに実装されている関数を呼び出す。メモリアクセス機能loadlib関連命令として提供されている命令のうち、メモリアクセス操作をするものです。v1変数v1のメモリアドレス取得アドレスはあらかじめll_retsetで指定されていた変数(llmodモジュールを使っている場合は変数dllret)に格納される。ll_ret命令で取得することもできる。n3任意のメモリアドレスn2からn3バイトのデータまたは文字列を読み込み変数v1に格納n3を省略した場合は文字列とみなされる。n3任意のメモリアドレスn2へ変数v1に格納されているデータn3バイトまたは文字列を書きこみn3を省略した場合は文字列とみなされる。n2任意のメモリアドレスn2へ4バイト数値データn1を書きこみ詳しい使用方法はHSPに添付されているヘルプやサンプルプログラムを参照してください。DLL呼び出し機能loadlib関連命令を用いてDLL関数を呼び出すには2種類の方法があり、それによって、使う命令が異なってきます。タイプAこの方法でDLL関数を呼び出す場合、プログラマはDLLのハンドルというものを意識する必要がありません。関数を呼び出す際(ll_callを実行するとき)にDLLをメモリ上にロードする仕組みになっているため、関数実行後に常にDLLを解放するように心がければメモリを節約することにつながると思われます。(システムDLLの場合は常にメモリ上に存在するのであまり関係ないかもしれませんが。v1関数呼び出し時に変数v1に自動的に戻り値が格納されるように設定ll_freeDLLの解放タイプBこの方法は、C言語などでDLLを動的にロードする場合とほぼ同じ手順で行なうものです。DLLのハンドルを意識する必要があります。DLLをロードしてから解放するまでの間、DLLのコードがメモリ内に読み込まれた状態になります。したがって、関数1つを呼び出すたびにDLLをロードするということはしません。一般的な使用ではこちらの方をお勧めします。v1関数呼び出し時に変数v1に自動的に戻り値が格納されるように設定このページではllmodモジュールを中心としてAPI関数呼び出しを行なっていくのですが、こちらはタイプBの方と大いに関連があります。そのため、このページではタイプAの方法については説明せずに、タイプBの方法のみ説明していくことにします。llmodモジュールllmodモジュールは、loadlib関連命令の機能をより簡単に使うことができるように、基本的な機能やよく使われる関数をモジュール命令として定義したものです。llmodモジュールは以下の機能を提供しています。API関数の呼び出しllmodモジュールの中で定義されるの重要な命令は以下の2つです。変数のメモリアドレスを取得するにはgetptr命令を使います。数値変数や文字列変数、また、それらの配列変数の要素に対しても使うことができます。API関数の引数としてメモリアドレスが必要な場合には、通常、この命令で取得したアドレスを指定します。v1としても同じことができます(llmodモジュールを使わない場合などに用いられます)。API関数を呼び出すための命令です。この命令の詳しい使い方は後で述べることにします。その他のモジュール命令群LLMODには他にもいくつかの命令が定義されています。主なモジュール命令を以下に示します。(内部で使用していると思われるモジュールも一部示しておきます。n1指定したハンドルのウィンドウが存在するか調べる。n1オブジェクトIDn1のHSPオブジェクトにキー入力フォーカス設定n1にウィンドウハンドルを指定することも可能。n1に-1を指定するとフォーカスを持つHSPオブジェクトのIDまたはウィンドウのハンドルをstatに格納する。