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

型の追加サンプル

ここでは HSP3 より可能になった型の追加サンプルをいくつか書いてみます。 型の追加に関しては今のところ参考になるのが HSP3SDK に添付されている vartype フォルダのサンプルしかありません。
とても分かりづらいので早速作ってみましょう。

参考サイト: HSP3.0Plugin(Var)



  • 様々な HSP3 拡張型変数を作り、使用してみる
    • 符号なし整数(uint)型
    • 1byte 変数(char)型(予定)
    • 短精度整数(short)型(予定)
    • 連想配列変数(hash)型(予定)
    • 他にも作成してサンプルとしてソースを公開してもよければ追記してください

注意事項

  • 間違いがある可能性が非常に高いためご注意ください
    • (修正できる人は率先して修正お願いします)
  • どうやら、直接代入したり mes/dialog にパラメータとして渡せないようです
  • とりあえず Microsoft Visual C++ 2005 Express Edition で作成しました

ソースファイル

UINT(unsigned int)

+  main.cpp
+  hspvar_uint.h
+  hspvar_uint.cpp

サンプル

+  uint.as
+  本体

コメント

符号なし整数型と符号つき整数型(特に負値)の演算は不具合のように感じられる動作がでまくるからな・・・。
(符号なし整数型だけで起きる問題ではないけれど、符号なし整数型は符号つき整数型とよく似ているので勘違いされて問題が起きやすい。)

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include "uint.as"
 
; 一見やる意味の無い判定のように見えるが( uint 型の値は常に 0 以上)
; 実はやってはいけない判定。(この場合の条件式は真になるように見えてしまうが偽になる。)
a = uint(1)
if a > -1 : mes "a は -1 より大きい"
 
; 記述順序で異なる結果。
; HSP では当たり前の結果なのだが、符号つき整数型と符号なし整数型が異なる型だと理解しきれていないと混乱のもと。
a = -1
b = uint(1)
mes a * b
mes b * a
 
; 記述順序で異なる結果 2。同じ動作のようで異なる動作。
; (1)の条件式は真、(2)の条件式は偽。
if uint(2200000000) > 0 : mes "h1" ; (1)
if 0 < uint(2200000000) : mes "h2" ; (2)

プラグインのソースに不具合は無さそうだけれど HSP の本体仕様のせい(?)で問題(mes に直接渡せないとか)が出ています。 fileuint_r20060905.zip -- naznyark? 2006-09-06 (水) 01:56:31

  • あ、修正ありがとうございます。 PukiWiki で添付ファイルは削除した後に(ここはパスワードってかかっていなかったと思います)同名でアップロードし直せば置き換えられるはずですが今回の場合は残しておいたのでしょうか。(どちらにしろ添付ファイルのバックアップから DL できますが...)ところで、 uidim ってマクロの方が効率いいんでしょうかね。一応、 exinfo->HspFunc_dim がありますし、ネイティブな方がいいかなと取り敢えず入れておいたのですが。ぼくはこういう場合、できる限りマクロ使わない派だったりします。どうせプラグイン使っているのでついでにって感じで。ただ、マクロで十分っていえばそれまでなんですけど。 -- Irisawa 2006-09-06 (水) 04:20:50
  • (signed int における)数値の -1 は実質は 0xffffffff(4294967295) ですからね。これを signed int では -1 と見なすことで負数を表現しているだけで、これを unsigned int に変換した場合は 4294967295 と見なすだけという...。これは結構、ややこしくて難しい概念ですよね。ところで int 型は実際には Win32OS 上では signed long int 型なんですよね。 -- 2006-09-06 (水) 04:37:15
  • > 今回の場合は残しておいたのでしょうか。
    あって邪魔になるものでもないし、個人的には他の人のアップしたファイルを削除するのは抵抗があるので残しておきました。
     
    > uidim ってマクロの方が効率いいんでしょうかね。
    未確認ですがマクロで使っている dimtype 命令も中では exinfo->HspFunc_dim と同じものを呼んでいると思うので実質ほとんど差は無いと思います。
    私はこんなときぐらいにしか使い道の無い dimtype 命令があえて用意されている意味を尊重してマクロにしてみました。 -- naznyark? 2006-09-07 (木) 02:11:03
    • > あって邪魔になるものでもないし、個人的には他の人のアップしたファイルを削除するのは抵抗があるので残しておきました。
      そうですね。あまりファイルが多くなりすぎるとどれがどれだか分かりにくくなるなどの問題はありますが...。あと、ファイルは自由に置き換えていただいてかまいません。そもそも、 Wiki なので意味もなくいたずらなどでファイルの削除等を行わなければ自由です。まあ、それについては書いていなかったので、妥当ですけど。 -- Irisawa 2006-09-07 (木) 15:55:47
    • > 私はこんなときぐらいにしか使い道の無い dimtype 命令があえて用意されている意味を尊重してマクロにしてみました。
      ddim(double 型) がマクロですね。感じとしてはついでに exinfo->HspFunc_dim のサンプルにもなるかなと思っていたのですがまあ、マクロの方が簡単ではありますね。 -- Irisawa 2006-09-07 (木) 16:00:51
  • 例えば動作仕様として
    ( int 型の負数) -> ( uint 型) の変換をエラーにする。
    ( 2147483648 (0x80000000) 以上の値の uint 型) -> ( int 型) の変換をエラーにする。(あるいは ( 2147483647 (0x7FFFFFFF) ) に丸める。)
     
    という仕様にしてしまえば不具合と勘違いするような動作はしなくなります。
    代わりにエラーが出やすくなりますが・・・。
    ( 2147483648 以上の uint 型の値は double や str 型から変換する。) -- naznyark? 2006-09-07 (木) 02:11:03
  • 実際の所、 uint 型って現状の HSP ではあまり意味がない気もしますけどね。直接変数に代入できない, mes/dialog などの命令のパラメータとして指定できない, デバッグダイアログに内容が表示されないなど HSP の仕様上の問題でワザワザ unsigned int にしている意味がない。どうしても 0x7fffffff(2147483647) 以上の数値を扱いたい場合は表示のみの時は int 型を strf 関数に "%u" を指定して変換すれば uint になりますし...。つまり、これは(現状では)単なるサンプル程度の価値しかないということになります。もう少し HSP 本体が対応してくれれば別の話でしょうけど。 -- 2006-09-07 (木) 16:11:42
  • >デバッグダイアログに・・・
    (余談)配列にしてダイアログの「配列変数」をチェックするとそこでは内容が表示される・・・ -- naznyark? 2006-09-08 (金) 02:03:05
  • >uint 型って現状の HSP ではあまり意味がない気もしますけどね
    たしかにあまり必要になることってないかも。すでにbignum型のプラグインもありますしね。でもサンプルは重要です。 -- 2006-09-11 (月) 08:17:27
  • 実際には、このページを更にサブページ化した方がいいような気もしますが。 short 型も hash 型もまだ着想さえできていませんので誰か代わりに作ってくれると嬉しいかも。 hash 型のようなただのデータ領域と異なる特殊な変数のサンプルがとにかくたくさん欲しいところですね。連想配列はうまくいけば構造体を実現できそうなのですが。 -- Irisawa 2006-10-31 (火) 02:04:48

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

添付ファイル:
fileuint_r20060905.zip
138件 [詳細]
fileuint.lzh
82件 [詳細]
filemain.cpp
245件 [詳細]
filehspvar_uint.h
239件 [詳細]
filehspvar_uint.cpp
226件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:31:06 (2436d)