#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)
    label   :  ラベルポインタ(32bit)
    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呼び出し関数登録

サンプル逆引き (3)

dragdrop.hsp
libptr.hsp
nkfcnv.hsp

情報

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