hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
MakeHPI/ActiveBasic/chapter1 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

概要

ActiveBasic(AB) はネイティブコンパイラを搭載するフリーの BASIC 系言語です。
言語仕様は VisualBasic?(VB) に非常によく似ていますので VB のソースをほぼそのまま移植できます。
(もちろん完全互換ではないので一部修正する必要があったりいろいろ大変です)

DLL も作成できるので HSP 用プラグインも恐らく作成できると思われます。

現時点で判明している問題点/仕様など

  • 大文字/小文字を区別しない言語仕様なのでいくつかの予約語に引っかかる
    • Type(構造体宣言) が HSP3TYPEINFO 構造体などの type メンバと重複
  • code_next() などのマクロ置き換えができない (AB 4)
    • exinfo->HspFunc_prm_next() のように書けば呼び出せるが、冗長
      • でもそれしかない。残念
  • その他

他の言語のガイド

他の言語のページも合わせて読むと理解が深まります。

開発環境

  • AB 4 以降(4 以前は保証しません)
  • HSP3.0 以降
  • スクリプトに
      1
    
     
    
        msgbox
    と書けばプラグインで用意した(固定された)メッセージボックスを表示する hsmsgbox プラグインを作る。

AB 版 SDK

HSP のプラグイン SDK は C 言語に向けて作られているため、他の言語ではそのままでは使用できません。
下の AB 向けに移植したものを使用してください。

ソースコード

  1. IDE で 「ファイル」->「新規作成」->「プロジェクト」->「DLL」を選択します
    1. プロジェクト名などは適当につけてください。
hsmsgbox.abp
+  hsmsgbox.abp
msgbox.hsp(サンプル)
+  msgbox.hsp

作り始める前に

ここでは DllEntryPoint?()、cmdfunc()、hsp3sdk_init()、msgbox()の4つの関数を説明します。

プラグイン初期化・登録関数
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
/**********************************************************
 *                HPI プラグイン初期化関数                *
 **********************************************************/
Sub Export hsp3hpi_init(info As *HSP3TYPEINFO)
    
    hsp3sdk_init( info )            ' SDKの初期化(最初に行なって下さい)
    sbInit()                        ' バッファマネージャー初期化
    
    info->cmdfunc  = AddressOf(cmdfunc)        ' 実行関数(cmdfunc)の登録
    info->reffunc  = AddressOf(reffunc)        ' 参照関数(reffunc)の登録
    info->termfunc = AddressOf(termfunc)        ' 終了関数(termfunc)の登録
    
End Sub

こんな感じのプロシージャです。(hsmsgbox.abp のは、これの省略形です。)
これは必ず Export して、HSPから呼び出せるようにします。

SDKの初期化

hsp3sdk_init()は hsp3plugin.sbp 内で次のように定義されています。

  1
  2
  3
  4
  5
  6
  7
Sub hsp3sdk_init(info As *HSP3TYPEINFO)
    '	SDK初期化
    '
    ctx    = info->hspctx
    exinfo = info->hspexinfo
    _type  = exinfo->nptype
    val    = exinfo->npval
End Sub

変数は、これの直前で定義されているグローバル変数です。グローバル変数は、どのプロシージャからも参照出来ます。
これらの意味は、後々説明していきます。

コールファンクションの登録

hsp3hpi_init (初期化関数) に、

    info->cmdfunc = AddressOf(cmdfunc)    ' 実行関数(cmdfunc)の登録

というものがありました。
cmdfuncは、HSPで命令として呼び出されたときの動作を登録する関数です。
同様に、reffunc では、関数やシステム変数としての動作を登録します。

AddressOf?は、指定した関数のポインタ (関数ポインタ) を返す演算子です。

コマンド受け取りファンクション
  1
 
    #cmd

は、キーワードと数値を関連づけます。
このキーワードがスクリプト中に現れた時、プラグインにその数値を渡してきます。
プラグインはその数値をもとになにかしらの事をします。

このとき呼び出されるのが、コマンド受け取りファンクション(cmdfunc)です。
今回の場合だと、

  1
 
    msgbox

としたときに、HSPが cmdfunc を呼び出します。
cmdfunc の引数に msgbox の数値が入っているので、Select Case 文で処理を振り分けてしまいます。

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filehsp3debug_h.sbp
177件 [詳細]
fileHSPSDK.lzh
291件 [詳細]
filemsgbox.hsp
434件 [詳細]
filehspvar_core.sbp
264件 [詳細]
filehsp3struct.sbp
300件 [詳細]
filehsp3plugin_h.sbp
275件 [詳細]
filehsp3plugin.sbp
297件 [詳細]
filehsp3debug.sbp
289件 [詳細]
filehsmsgbox.abp
422件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2008-08-03 (日) 15:34:37 (1953d)