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

プラグインから任意のラベルにジャンプするsdk30a.png

今回はjumpプラグインを例にラベルジャンプの方法を説明していきます。

開発環境

Borland Delphi 6 Personal

  • スクリプトに
      1
      2
      3
      4
      5
    
     
     
     
     
     
    
        jump *Label_1
        stop
    *Label_1
        mes "Hello, world !"
        return
    と書けばLabel_1にジャンプをして処理を実行し、ジャンプ元に処理を返すプラグインを作ります。
  • ラベルジャンプの方法を学ぶ。

ソースファイル

+  jump.dpr
+  jump.as(プラグイン定義ファイル)
+  jump.hsp(サンプル)
ラベルはラベルへのポインタで取得される
  1
  2
 
 
  lbptr := exinfo.HspFunc_prm_getlb;    // ラベルポインタを取得
  exinfo.HspFunc_call(lbptr);           // ラベルへgosubジャンプ

スクリプトのラベルの位置はラベルへのポインタによって取得できます。
これを取得するのがHspFunc_prm_getlb関数です。

この関数で得られたラベルポインタを使って実際に処理をジャンプさせることができます。
gotoによるジャンプはHspFunc_setpcを、gosubによるジャンプはHspFunc_callを呼び出します。

スクリプトでのリターンコードについて

HSPのreturnには通常のgosubによるパラメータ無しの復帰と、oncmdで見られるパラメータ付きの復帰があります。
HSPのヘルプによるとreturnで数値を返すと値によってシステム変数にリターンコードが格納されるようです。

これはプラグインからでも簡単に取得できますがreturnで値を返したのか返さなかったのかは、HSPCTX構造体のretval_levelメンバを調べることで分かります。
値を返さなかった時は0(FALSE?)、値を返した時は1(TRUE?)となります。

これを利用してjump()を以下のように書き換えることでリターンコード(整数)を正確に得ることができます。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
uses
  Windows, SysUtils, hsp3plugin in '..\hsp3plugin.pas';
 
var
  ret: Array[0..255] of Char;
 
procedure func_jump;
var
  lbptr: PWord;
begin
  lbptr := exinfo.HspFunc_prm_getlb;
  exinfo.HspFunc_call(lbptr);
 
  if ctx.retval_level <> 0 then begin
    StrFmt(ret, 'ret=%d', [ctx.stat]);
    MessageBox(0, ret, 'returnコード', MB_OK);
  end;
end;

コメント


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

添付ファイル:
filejump.hsp
163件 [詳細]
filejump.dpr
220件 [詳細]
filejump.as
222件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:30:53 (2436d)