HSPで外部ファイルを内部アプリとして動かしてみる

with 2件のコメント

お正月向けのゲームなかなか配信できなくてすみません。

今回は全く違う話題です。

 

今までのWallsの実行ファイルには、

「内部アプリ」と「外部アプリ」というものが存在しました。

「内部アプリ」はWalls本体に最初から組み込まれているアプリで、

「外部アプリ」は.exe形式でHSPのexec命令で動かすためのアプリです。

 

しかし、このままだと内部アプリだけ更新させたいときや追加したいときに、

わざわざWallsそのものをアップデートしなければなりませんでした。

外部アプリならアプリだけ配布すれば解決しますが、

やはり「OSもどき」としてはなるべくOSもどき内部で実行させたいところ。

 

つまり、

hspthread0

この状態から

hspthread

こんな状態にしたいわけです。

 

run命令を使えばHSPのaxファイルを実行させることはできますが、

run命令を実行させると実行前のスレッドは終了してしまいます。

 

そこんところで半年くらい悩んでいたんですが、

以前からWalls Luxorで読み込み画面を表示させるために使っていたHSPThread.dllを使えば

OSもどき本体内部で外部のaxファイルを実行できるということに

今気が付きました。なんで今まで気づかなかったんだろう…

 

例えば、メインスレッド側(HSPThread.hsp)を(要 HSPThread.dll)

#uselib “HSPThread.dll”
#func HSPCreateThread “HSPCreateThread” int,str,int,int,int,int,int

gsel 0
mes “メインスレッドでーす”

objsize 100, 30
button “サブスレッド実行”, *subthread

stop

*subthread
clrobj

/*サブスレッド実行*/
HSPCreateThread hwnd,”SubThread.ax”,0,0,640,480,0×100

として、サブスレッド側(SubThread.ax)を

mes “こっちはサブスレッドでーす”

とすれば、

snapcrab_hot-soup-processor-ver34a_2017-1-3_19-13-2_no-00

「サブスレッド実行」ボタンを押すと

snapcrab_hot-soup-processor-ver34a_2017-1-3_19-15-19_no-00

こうなります。

 

これでは#include命令と見かけはほとんど変わりませんが、

一番の違いはメインスレッドとサブスレッドは別々のスレッドで実行しているところです。

 

大きな違いはもう一つ。

#includeを用いた場合、

a.hspを

#include “b.hsp”

stop

b.hspを

mes “b.hspを実行中”

stop

としてa.hspを実行するとb.hspの内容も実行されますが、

これをHSPで.exe形式にコンパイルした後に、

b.hspの内容を

mes “b.hspを実行中ですよ”

stop

と書き換えても、書き換える前にコンパイルしたexeファイルを実行すると

b.hspを書き換える前と同様で「b.hspを実行中」と表示されてしまいます。

書き換えた後のb.hspを実行させるためには、わざわざコンパイルし直す必要があります。

 

でも、HSPThread.dllを用いれば、

a.hspをコンパイルした後でもb.hsp(実行するためにはb.axを作成する必要あり)を

mes “b.axを実行中ですよ”

stop

と書き換えるだけで、

書き換える前にコンパイルしたexeファイルを実行しても

「b.axを実行中ですよ」と表示されます。

要は、わざわざコンパイルし直さなくてもソースコードを書き換えるだけで、

コンパイルした.exeで処理させる内容を変えることができるわけです。

 

これを利用すれば、SetParentと組み合わせれば

.ax形式のソースコードファイルをOSもどきの本体内部で実行させることができるうえ、

アプリだけを更新させたり、追加したいときにもゲームのアドオンやMOD、プラグインのように、

ソースコードファイルだけを書き換えたり、追加したりすれば

わざわざOSもどきそのものをアップデートする必要がなくなります。

 

OSもどきそのものをHSPThread.dllで実行させれば、

OSもどきをアップデートするときにも、わざわざ容量が大きいexeファイルを

ダウンロードさせずに、ソースコードファイル(axファイル)を配布すれば

小さい容量でアップデートさせることが可能です。たぶん。

ただし、パックファイルは使えませんが…

 

もしかしたらこの仕組を利用しているOSもどきは既に存在するかもしれませんが、

Walls Luxorにはこの仕組を取り入れてみたいと思います。

2 Responses

  1. CubeSoftware.Corporation
    | 返信

    HSPThread.dllですか!
    私も使用しています。^_^
    Walls Luxorの開発頑張ってください!

    • yotiosoft
      | 返信

      コメントありがとうございます。
      頑張ります!

Leave a Reply