外部DLLのリンク/プラグイン(DLL)の使い方


■ひまわりでは、外部のDLL(Dinamic Link Library)を、リンクすることにより、C言語や、Delphiなどで作った命令を呼び出すことが出来ます。

・DLLを利用する手順の説明

  1. インポートする命令の定義
  2. 命令の呼び出し

■ひまわりで呼び出すことが出来るDLL

以下の条件を満たすもの
呼び出すDLLの引数及び返却値が、void(なし), ポインタ型、WORD(符号なし2バイト整数),DWORD(符号なし4バイト整数),int(符号あり4バイト整数),BOOL(論理型)であるもの

■ver.1.33以前のバージョンで使われていた「DLL宣言」「文字型DLL宣言」の解説は、こちら。(これは、ver.1.33以前の互換性のためだけに残されている命令です。)


「DLLを利用」命令

書式:
『DLLファイル名』の、『C言語の関数宣言』を、『引数宣言』の、『命令の名前』として、DLLを利用

引数の説明
DLLファイル名 リンクするDLLのファイル名
C言語の関数宣言 リンクする関数を、C言語のように、"int func(int, int)"のように宣言したもの
返却値 関数名(引数型, 引数型, 引数型 ... )
利用できる型の種類は、
『WORD, DWORD, BOOL, int, char*, void』のいずれか
引数宣言 ひまわりで使う、『?の,?を』のような引数の助詞を指定
命令の名前 ひまわりで使う命令の名前
実行の結果
特殊変数「それ」に、実行の結果を返します。
例1:
ためしに、WindowsAPIの、SetCursorPosを、使ってみます。
これは、指定の座標(x,y)へ、マウスカーソルを、移動させるというものです。
’DLLの利用を宣言
『user32』の、『SetCursorPos(int,int)』を、
『?の,?へ』の、『マウス移動』として、DLLを利用

’宣言した命令を実行
50の、50へ、マウス移動

次に、WindowsAPIの、GetKeyStateを使ってみます。
GetKeyStateのAPIは、指定のキーが押されているかどうかを判別します。
’DLLの利用を宣言
『user32.dll』の、『WORD GetKeyState(int)』を、
『?の』の、『キー状態取得』として、DLLを利用

「Aのキーを押してみてください。」と、表示。
表示用ラベルを、ラベルとして、作成。

*確認処理
キー番号は、ASC(`A`)
キー番号の、キー状態取得
表示用ラベル=AND(それ,$80)
描画処理反映。
確認処理へ、飛ぶ。
例2:
次に、もうちょっと高度な構造体を用いたWindowsAPIを使ってみます。
但し、ひまわりには、構造体がないので、ある程度WindowsAPIの知識が必要になります。
例として、世界標準時刻を取得する、GetSystemTimeを使ってみます。
"kernel32"の、"GetSystemTime(char*)"を、
『?に』の、『世界標準時刻取得』として、DLLを利用'(*1)

SYSに、16バイトを、確保。'(*2)SYSTEMTIME構造体のサイズを確保
SYSに、世界標準時刻取得'GetSystemTimeを、呼び出し

'SYSTEMTIME構造体は、全て WORD(2バイト整数型)なので、
SYSTIME=「年






ミリ秒」

Iを、0から、7まで、繰り返す(
  INDEX=I*2+1{バイト}
  SYSの、INDEXを、『WORD』形式で、バイナリ取得'(*3)
  「{SYSTIME#I} = {それ}」と、表示。
)。
(*1)構造体を無理やり作るために、構造体へのポインタを、『char*』型として関数に渡します。
(*2)次に、構造体のサイズ分だけ、メモリを確保します。SYSTIME構造体は、WORD=2バイトが、8個なので、8×2=16バイト確保します。
(*3)GetSystemTimeを、『世界標準時刻取得』という名前で呼び出したら、最後に、バイナリ構造体から、任意部分のバイトを取得します。

戻る