#func

外部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"が呼び出されます。

関連項目

#uselib外部DLLの指定
#cfunc外部DLL呼び出し関数登録

サンプル逆引き (10)

clbk_enumwindows.hsp
clbk_gwlwndpproc.hsp
dragdrop.hsp
libptr.hsp
multitouch1.hsp
multitouch2.hsp
multitouch3.hsp
nkfcnv.hsp
ntmem.hsp
xsample_alphapaint.hsp

情報

バージョン3.5
作成日2017/09/13
著作者onitama
URLhttp://hsp.tv/
備考ver3.5標準命令
タイプ内蔵命令
グループプリプロセッサ命令
対応環境
  • Windows 版 HSP
  • コマンドライン版 HSP
  • HSPLet
移植のヒントHSPLet時は、関数と同名のメソッドが呼ばれることになります。(詳細は、HSPLetマニュアルを参照してください。)
hs ファイルhsphelp\i_prep.hs