HOME >> HSPサンプル置き場 兼 実験室 >> DLLを動的にロードしてみる
DLLを動的にロードしてみる | |||||
ここではHSPでDLLを動的にロードして、ツール類でよくある"プラグイン"っぽいことをやってみたいと思います。 とりあえず"プラグイン"として、足し算と引き算と掛け算を行う3種類のDLLを用意しました。 これらのDLLは"Calc"というおなじ名前、同じ引数の関数をもっていて、使用したDLLによって別々の処理結果が得られるようになっています。 今回はソースの再利用のことを考えて、DLLをロードしたり関数を呼び出したりする部分はモジュール化しました(CallFuncExt.as)。 以下のZIPファイルの中に今回の実験で使用したものが入っています。 モジュールの詳しいことは、アーカイブ内のテキストファイルを参照してください。 CallFuncExt.zip 12KB とりあえず今回使用するDLLのソースコードです(これは足し算を行う"tasizan.dll"のものです)。
次にHSPのソースコードです
サンプルの全体の流れは、初期化→DLLロード→引数を指定して関数を実行→終了処理、といった感じです。 初期化は"InitCallFuncExt"命令で行います。 これはモジュール内でDLLのハンドルを格納しておく配列変数の定義を行っているだけです。 DLLのロードは"LoadLib"命令で行います。 これは初期化時に確保した配列変数にDLLのハンドルを格納しています。 1番目の引数はDLL名、2番目の引数は配列変数の何番目のインデックスに格納するかを指定しています。 引数は配列変数に格納して指定します。 今回呼び出す"Calc"関数の引数は引数は2つなのでこんな感じで。 arg = 3,7 引数を格納したら"ExecFunc"命令で関数を実行します。 この命令は"LoadLib"命令で指定したID、関数名、配列変数、引数の数を指定します。 関数を実行してみると、使用したDLLによって戻り値が異なっています(当然ですが・・・)。 最後にロードしたDLLを"ExitCallFuncExt"命令で開放します。 この処理は必ず行ってください。これを忘れると良くないことになると思います。 今回は2つの数字を引数としてDLLに渡しましたが、画像処理を行うDLLにVRAMバッファへのポインタなんかを渡してやれば、プラグインらしいことができるんじゃないでしょうか。 |
|||||
更新日:2008/5/6 |