HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1114
うひょaxファイルを新規に実行したい8解決


うひょ

リンク

2006/11/14(Tue) 22:12:44|NO.3474

axファイルはrun命令で実行できますが、
今までのプログラムが止まって新しいプログラムに移行しますよね。
そうではなく、今までのプログラムを続いた状態でaxファイルも実行したいんです。
できればexeにしたくないので、このような方法を取りたいのですが、
どうすればいいのでしょうか。よろしくお願いします。



この記事に返信する


Irisawa

リンク

2006/11/14(Tue) 23:34:54|NO.3478

再配布できない & EXEにせずにデバッグモードで実行した場合のみですが以下のような方法
ではどうでしょうか。


dialog "ax", 16, "AX ファイル選択" if stat { axfn = refstr exist axfn if strsize > -1 { exec dirinfo(1) + "/hsp3.exe " + axfn } } stop



うひょ

リンク

2006/11/15(Wed) 14:43:06|NO.3483

できればaxファイルを呼び出すほうはexeにして配布したいのですが、
hsp3.exeのコランドラインにaxファイルを指定すれば実行できるのは初めて知りました。
これを見て思ったのですが、axファイルを実行することは実行する側にhspが無ければ
ダメなんですか?



山田 雄己

リンク

2006/11/15(Wed) 16:07:15|NO.3484

HSP 2.6 時代のテクニックなので今でも利用できるかは知りませんが・・・

・run 命令を使えば、ax ファイルを同期的に実行できる。
・exec 命令を使えば、exe ファイルを非同期に実行できる。

ということは、

run 命令で ax ファイルを実行する exe ファイルを exec 命令で実行すれば、
ax ファイルを非同期に実行することが出来ますよね?



Irisawa

リンク

2006/11/15(Wed) 16:51:46|NO.3485

なら、ちょっと裏技的にこうしたらどうでしょうか。


#uselib "kernel32.dll" #cfunc GetModuleFileName "GetModuleFileNameA" int, var, int if dirinfo(4) ! "" { run dirinfo(4) } dialog "ax", 16, "AX ファイル選択" if stat { axfn = refstr exist axfn if strsize > -1 { sdim buf, 256 if GetModuleFileName(0, buf, 256) { exec buf + " " + axfn } } } stop

動作保証ができないのとrunするために一瞬ウィンドウが表示されるのでちらつくかも
しれません。
これは必ずEXEにしてから試してください。



Irisawa

リンク

2006/11/15(Wed) 17:09:55|NO.3486

> hsp3.exeのコランドラインにaxファイルを指定すれば実行できるのは初めて知りました。

hsp3.exeはコマンドライン引数が渡された場合、それを実行します。
あと、簡単に言えばデバッグモードはhsp3.exeにobjファイルを渡して実行しています。
また、hsp3.exeはカレントディレクトリにstart.axファイルがあるとそれを実行したり
します。

で、いろいろ試してたら上記のサンプルに問題が...。
パスにスペースが入っている場合などLFNだと実行に失敗したりします。
引数を「"\"" + arg +"\""」のようにダブルクオートで囲んでください。

まあ、無理矢理なんで予想不能な動きすることもあるかもしれませんが。



Irisawa

リンク

2006/11/15(Wed) 17:36:57|NO.3488

すみません。
両方に対応したバージョンです。


#ifndef _debug #uselib "kernel32.dll" #cfunc GetModuleFileName "GetModuleFileNameA" int, var, int if dirinfo(4) ! "" { run dirinfo(4) } #endif dialog "ax", 16, "AX ファイル選択" if stat { axfn = refstr exist axfn if strsize > -1 { #ifndef _debug sdim buf, 256 if GetModuleFileName(0, buf, 256) { exec buf + " " + axfn } #else axfn = "\"" + axfn + "\"" exec dirinfo(1) + "/hsp3.exe " + axfn #endif } else { mes "ファイルがありません。" stop } } else { mes "キャンセルされたかエラーです。" } stop

なんか、run命令とexist命令にはダブルクオート付パスを渡すとエラーになるようで。
この2つは付けなくても正常に動作するようなので付けていません。



さくら

リンク

2006/11/15(Wed) 21:15:58|NO.3490

実用的かどうかは、判りませんが、HSP2.x時代に質問と同じような要望があり、
実験したことがあります。保存してあったドキュメントから、ほんの少し、HSP3
で動くように簡単なサンプルとして、書換えて実験してみました。axファイルでは
ないのですが、親となるexeファイルを作る際に、このexeからpackfileに格納した
別のexeを実行させるというものです。別プロセスとして単独で実行されます。

>今までのプログラムを続いた状態で・・・・
というニーズに対応?していると思うのですが・・・・ただ、親となるexeファイル
のサイズが大きくなるのが欠点です。作成手順は、ソースのコメントを参照して下さい。


;プログラム(1) (version.as) ;********************************************************* ; 複数プログラムを一つのexeにまとめて実行 (version.as) ; ; (バージョン情報表示モジュールサンプル) ; ; ●version.asとしてsaveしておきます! ; ;********************************************************* #deffunc version screen 0,300,160,2 title "バージョン情報" font "MS Pゴシック",15 color 0,0,0 pos 55,15: mes "Sample Program    Ver1.xx" pos 20,50: mes "Copyright (C) 2006 xxxxxx" color 0,0,255 pos 70,70: mes "http://hsp.tv/" pos 70,85: mes "Hot soup processor" width 300,160,dispx-300>>1,dispy-160>>1:gsel 0,2 repeat : await 50 : loop ;必須 return ;プログラム(2) (dbexe.as) ;********************************************************** ; バージョン情報表示サンプルモジュール (dbexe.as) ; ; ●dbexe.asをdbexe.exeとしてコンパイルする。 ; ; このdbexe.exeをmultipack.asのpackfileに格納します。 ;********************************************************** #module #include "version.as" ;(例)バージョン情報命令 #global onexit *owari version ;version.asの中のversion命令を実行 stop *owari end ;プログラム(3) dbexe.exeをpackfileに格納して呼び出します。 ;*************************************************************** ; メインプログラム (multipack.as) ; ; このファイルをexeにする時に、start.axとdbexe.exeをpackfile ; にいっしょに格納して下さい。 ; exeにした、このプログラムを起動すると、プログラム(2)から、 ; プログラム(1)のモジュールが呼出されて実行されます。 ;*************************************************************** screen 0,300,200,2 title "別のexeをpackfileに格納して実行サンプル" objsize 60,30 : color 0,0,200 pos 10,40:mes "バージョン情報" pos 160,30:button "Go",*v_sion width 300,200,100,100:gsel 0,1 stop *v_sion ;実行 exec "dbexe.exe" ;version呼び出し stop



うひょ

リンク

2006/11/18(Sat) 18:31:20|NO.3575

ありがとうございます。いろいろな方法があるのですね。
いろいろ試してみます。
ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.