戻り値となる変数属性 | int/char。関数の戻り値となる値の属性を指定する。 戻り値が必要ない場合は指定しなくてよい。 本指定は変数の属性(数値変数/文字変数)を定義する意味で行うため、プログラム内で本関数を使用する時の変数名を示すものではない。 |
LGP関数名 | char。プログラム内で使用する関数名を指定する。 本指定とDLL内の関数名を一致させる必要はない。 |
引き渡し変数(引数) | int/char。関数に引き渡す値の属性を指定する。 DLLの仕様にあわせて必要な数、適切な順番で指定する。 本指定は変数の属性(数値変数/文字変数)を定義する意味で行うため、プログラム内で本関数を使用する時の変数名を示すものではない。 |
DLLファイル名 | char。DLLのファイル名を指定する。 |
DLL内の関数名 | char。DLL内の関数名を指定する。 |
解説
1 | EXFUNCはプログラムのどこに指定しても利用できます。DLL呼び出しの記述と実際に使用する呼び出すプログラムの出現順が前後してもかまいません。 |
2 | DLLから引き渡すデータ型や個数は、呼び出し元と呼び出されるDLLで一致させること。 |
3 | 文字列型の引数にNULLを引き渡す場合には「未使用の文字列変数」または「引数に数値型(int)を定義し0を引き渡す」を行う。 |
4 | 以下の引数は使用できない。 ・引数の数字がInt(符号付32bit)以外である ・引数が配列や構造体である ・引数でアドレスを送るである ・戻り値が配列や構造体である |
5 | ・引数にしていた文字列変数に結果を設定するDLLの場合、文字列変数の領域長を十分に確保しておく必要がある。文字列変数に格納できる文字列長は同変数に代入した文字列の内で最大の文字列長となる。通常はこの最大長の変更は自動で行われるがDLL内の代入では変化しない。そこで、事前に必要な領域長に拡張しておく必要がある。DLLで最大100バイト長の文字列を代入する場合には事前に「100バイト長の文字列を一旦代入する」または「LSTR関数を使用する」方法で拡張を行っておくこと。 なお、DLLにを呼び出すまでに未使用の文字列変数はDLLからはNULL扱いとなる。 |
1 | DLL内の関数のインタフェースはWINAPI形式にする。例えば入力が( int , char* )で出力が int の場合は以下のようにする。 int WINAPI test_func( int a , char *b ){ ・・・ } |
2 | 「.def」ファイルで関数に番号を付ける |
EXFUNC KEKKA MSGPUT(a,b$,c$,d),"User32.dll","MessageBoxA" K = MSGPUT(0,"テスト","テストです",0)
EXFUNC KEKKA UNLHA( A,B$,C,D ),"UNLHA32.DLL","Unlha" CMD$="a "+CHR(34)+"OUT.LZH"+CHR(34)+" "+CHR(34)+"in.txt"+CHR(34) A=UNLHA( 0, CMD$, 0, 0)