オリジナル URL : http://members.jcom.home.ne.jp/whw/4779/ ---- sipc.dllをHSPから使用するサンプルソースコード 自己責任でご自由にご使用ください。 モジュール化しました。 下の sipc_module.as ファイルをHSPのcommonディレクトリに置いて インクルードしてください。 関数一つでコマンド送信ができます。 例) # include "sipc_module.as" sipc_sending_s "say 'てー!'" --- sipc_module.as ここから --- ; ; @file sipc_module.as ; @date 2003.10.16(Thu) ; sipc.dll(1.0.0.2)使用モジュール ; ;; ; sipc_sending_s p1 ; ; p1: 送信するコマンド文字列または文字列変数 ; ; 半角255文字以内のコマンドを送信する際に使用します。 ; この関数を呼び出すとシステム変数statに次の値がセットされます。 ; 0: すべて成功 ; 1: Send は成功(Disconnect に失敗またはエラー) ; 2: DLLロードに失敗 ; 3: Connect または Send の関数ポインタの取得に失敗 ; 4: Connect の戻り値がエラー ; 5: Send の戻り値がエラー ; statが0または1のとき、システム変数refstrに ; Sendの結果文字列が代入されます。 ; ; 例) sipc_sending_s "ls" ; ;; ; sipc_sending_v p1 ; ; p1: 送信するコマンドの入った文字列変数 ; ; 動作は sipc_sending_s と同じです。 ; 送信するコマンド文字数が半角255文字を越える場合に使用します。 ; ;; ; sipc_free ; ; ロードした sipc.dll を開放します。 ; この関数はプログラム終了時に自動的に呼ばれます。 ; 明示的にDLLを開放したい場合に使用してください。 ; # module # const BYTENUM 4096 # deffunc sipc_sending_s str mref sInCommand,32 ;; 255文字までの文字列 goto *sending02 # deffunc sipc_sending_v val mref sInCommand,24 ;; 文字列変数 *sending02 mref iStat,64 mref sRefstr,65 iStat = 0 sRefstr = "" if iDLL == 0 { ;; DLLが未ロードの場合、初期化を行う ;; sdim sID,BYTENUM sdim sCommand,BYTENUM sdim sResult,BYTENUM ;; DLLのロード ll_libload iDLL,exedir+"\\sipc.dll" if iDLL==0 { iStat = 2 return } ;; 関数のAPI取得 ll_getproc iAPIConnect,"Connect",iDLL ll_getproc iAPIDisconnect,"Disconnect",iDLL ll_getproc iAPISend,"Send",iDLL } ;; Connect ;; if iAPIConnect == 0 { iStat = 3 return } ;; IDを作成 sID = "hsp" ;; 年からmsecまでを追加 repeat 8 if cnt == 2 { ;; 曜日値は使用しない continue } int Temp gettime Temp,cnt if cnt != 0 { if cnt != 7 { str Temp,2 } else { str Temp,3 } } else { str Temp,4 } sID += Temp loop ;; パラメータ準備 ll_getptr sID ll_ret iRetVal iConnect.0 = iRetVal ll_callfunc iConnect,1,iAPIConnect ll_ret iRetVal if iRetVal { iStat = 4 return } ;; Send ;; if iAPISend == 0 { iStat = 3 return } sCommand = sInCommand ;; パラメータ準備 ll_getptr sCommand ll_ret iRetVal iSend.0 = iRetVal ll_getptr sResult ll_ret iRetVal iSend.1 = iRetVal iSend.2 = BYTENUM - 1 ll_callfunc iSend,3,iAPISend ll_ret iRetVal if iRetVal == 0 { sRefstr = sResult } else { iStat = 5 return } ;; Disconnect ;; if iAPIDisconnect == 0 { iStat = 1 return } ll_callfnv iAPIDisconnect ll_ret iRetVal if iRetVal { iStat = 1 return } iStat = 0 return ;; DLLを解放する ;; # deffunc sipc_free onexit mref iStat,64 iOutVal = 0 ;; 念のためDisconnectも呼ぶ。今のところ余計に呼んでも不具合はない。 if iAPIDisconnect { ll_callfnv iAPIDisconnect ll_ret iRetVal if iRetVal { iOutVal = 1 } } ;; DLL解放 if iDLL { ll_libfree iDLL iDLL = 0 } iStat = iOutVal ;; statは最後に代入しないと上書きされる return # global ;; end ;; --- sipc_module.as ここまで --- 旧サンプルはこちら。 以上。