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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0831
かっぺいend命令はどのように行われているのでしょうか7解決


かっぺい

リンク

2008/8/31(Sun) 13:56:30|NO.18808

タイトル通り、end命令はどのようにして行われているのですか。
たとえば、過去にも似たようなものがあったのですが、下のスクリプトで

#module
#deffunc test onexit
end
return
#global

(このプログラムの内容には触れないでください・・・)
Runtime Errorと出てきて、異常なプログラム終了といわれますが、
それはなぜなのですか?
また、それを改善することはできないのでしょうか?
教えてください。



この記事に返信する


S&R(楓)

リンク

2008/8/31(Sun) 14:25:58|NO.18809

まぁそのスクリプトを簡単に理解するには、次のように考えればいいよ。

#module #deffunc test onexit end return #global end
endはHSPが使用した様々な資源をOSに返す処理などが行われます。
たとえば図書館で借りた本を全部返したあと、同じ本を返すことはできませんよね?そーゆーことです。

もっと詳しく知りたいならどうぞOpenHSPへ 扉は開かれています。



begriff

リンク

2008/8/31(Sun) 20:04:19|NO.18814

アセンブリ的になりますが、
ようは、pushしたものをpopせずにretしてOSに制御を戻してはいけないのです。
(この場合関数が呼ばれ実行されているコード位置を記憶するため一旦pushされる…?)
ですので正常にEXEを終了させるためのAPIがあります。ExitProcessなど…
かなり間違ったことを言っているやも知れませんので、悪しからず。

しかしend命令はAPIを使って正常に終了しているのではないのか…



ANTARES

リンク

2008/8/31(Sun) 23:17:14|NO.18823

onexitを指定した場合、原則的にはreturnすれば何も問題はないはず。
なぜ、あえてモジュール内で終了したいのでしょう?



soral

リンク

2008/9/1(Mon) 00:37:54|NO.18829

質問者自身もこれがイリーガルなスクリプトであることは理解しているようですし、
「何故このようなスクリプトを組む必要があるのか」という問いかけは的外れではないかと。

むしろ、このような誤ったスクリプトを処理した際にインタプリタごと落ちてしまうHSPの実装(バグ)が問題では?
仕様上正しくないスクリプトが実行されたのであれば、その旨エラーメッセージを表示して安全に終了すべきです。



S&R(楓)

リンク

2008/9/1(Mon) 07:16:24|NO.18834

>なぜ、あえてモジュール内で終了したいのでしょう?

そういう回答も考えましたが、そういう質問ではないと思います。



S&R(楓)

リンク

2008/9/1(Mon) 18:13:37|NO.18839

>なぜ、あえてモジュール内で終了したいのでしょう?(ANTARES)



かっぺい

リンク

2008/9/3(Wed) 16:29:28|NO.18936

よくわかりました。ありがとうございます。



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