外部DLL呼び出し命令登録
#func 新規名称 "関数名" タイプ名1,…
外部DLLを呼び出すための新しい命令を登録します。
先に#uselib命令により外部DLL名を指定しておく必要があります。
新規名称、関数名、タイプをスペースで区切って書きます。
新規名称の直前に「global」を入れることで、 すべてのモジュールで永続的に利用することのできる命令を作成することができます。
関数名は、"関数名"のようにダブルクォートで囲むことで、 DLLの完全なエクスポート名を記述することができます。
ダブルクォートで囲んでいない場合は、「_関数名@16」というVC++のエクスポート規約に基づいた名前に変換されます。
タイプ名には、引数の詳細を記述します。
#deffunc命令と同様に、引数の型を「,」で区切って指定してください。
引数の数や、型の順番に制限はありません。
引数の型として使用できる文字列は以下の通りです。
型 : 内 容
------------------------------------------------------------------
int : 整数値(32bit)
var : 変数のデータポインタ(32bit)
str : 文字列ポインタ(32bit)
wstr : unicode文字列ポインタ(32bit)
sptr : ポインタ整数値または文字列のポインタ(32bit)
wptr : ポインタ整数値またはunicode文字列のポインタ(32bit)
double : 実数値(64bit)
float : 実数値(32bit)
pval : PVal構造体のポインタ(32bit)
comobj : COMOBJ型変数のデータポインタ(32bit)
(*) bmscr : BMSCR構造体のポインタ(32bit)
(*) prefstr : システム変数refstrのポインタ(32bit)
(*) pexinfo : EXINFO構造体のポインタ(32bit)
(*) nullptr : ヌルポインタ(32bit)
(*)がついている項目は、 引数として指定する必要なく自動的に渡されるパラメーターを示しています。
以下は、4つの引数を指定して実行する例です。
例 :
#uselib "test.dll"
#func test "_func@16" var,int,int,int
test a,1,2,3 ; test.dllのfunc(&a,1,2,3)が呼び出される
タイプに数値を指定した場合は、ver2.5以降のDLLタイプ指定と互換性のある引数が自動的に設定されます。ただし、いくつか互換性のない指定値があります。その場合は、コンパイル時にエラーとして報告されます。
ver2.5とは以下の点で互換性の注意が必要です。
・BMSCR構造体は、flagからcolorまでのフィールドのみ参照できます。
・PVal構造体は、ver2.5のPVAL2構造体と互換があります。
・PVal構造体のflagフィールド(型タイプ値)やlenフィールド(配列情報)をDLL側で書き換えることはできません。
・PVal構造体から文字列型の配列変数にアクセスすることはできません。
これ以外の点においては、HSP ver2.5と同等の情報が受け渡されます。
関数名の前に「onexit」を入れることにより、終了呼び出し関数として登録することができます。
例 :
#func test onexit "_func@16" str,int,int
上の例では、アプリケーション終了時に自動的に"_func@16"が呼び出されます。
| バージョン | 3.4 |
| 作成日 | 2014/04/22 |
| 著作者 | onitama |
| URL | http://hsp.tv/ |
| 備考 | ver3.4標準命令 |
| タイプ | 内蔵命令 |
| グループ | プリプロセッサ命令 |
| 対応環境 |
|
| 移植のヒント | HSPLet時は、関数と同名のメソッドが呼ばれることになります。(詳細は、HSPLetマニュアルを参照してください。) |
| hs ファイル | hsphelp\i_prep.hs |