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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0922
kou2Aもっと命令がほしいです4解決


kou2A

リンク

2006/9/22(Fri) 21:39:21|NO.2560

HSPでは、文字列を比較する関数がないですよね。
strcmpのような。(wikiなどにモジュールがあるのは知っていますが)

しかし、なぜ、新しく作られたりしないのでしょうか?
ランタイム(?)の大きさとか、製作者様の時間とかの問題でしょうか・・・。

自分で足りない関数を補足しようと、
学校の友達からコンパイラ(?)をもらって、make hpi に挑戦しました。

でも、DLLのサイズが最低28Kになってしまうのです。
メッセージボックスだけでです。(wikiのとおりにやりました)
僕が悪いのでしょうか?
これ以上サイズを小さくするためには、どこか削れる場所はあるのでしょうか?

よろしくお願いします。



この記事に返信する


あんすこえむ

リンク

2006/9/22(Fri) 21:59:29|NO.2561

>HSPでは、文字列を比較する関数がないですよね。
>しかし、なぜ、新しく作られたりしないのでしょうか?

それは、関数を使わなくても比較できるから です。
<、>で大小も比較できます。
!の比較演算をつかうと、ほぼstrcmpと同様のことができます。


a="ABC":b="ABC":gosub *hikaku
a="ABC":b="DEF":gosub *hikaku
a="ABC":b="000":gosub *hikaku
stop

*hikaku
if a=b : mes "同じ"
if ( a!b )>0 :mes "Aが大きい"
if ( a!b )<0 :mes "Bが大きい"
return



Irisawa

リンク

2006/9/22(Fri) 23:18:27|NO.2563

> でも、DLLのサイズが最低28Kになってしまうのです。
> メッセージボックスだけでです。(wikiのとおりにやりました)
> 僕が悪いのでしょうか?
> これ以上サイズを小さくするためには、どこか削れる場所はあるのでしょうか?

コンパイラにもよりますがMS系のコンパイラの場合はWinMainやDllMainなどの前に
スタートアップ関数として暗黙的な初期化ルーチンが別に組み込まれています。
これらを使用するとそれだけで(何もしてなくても)64KB以上になったりします。
場合によっては工夫することで暗黙的な初期化ルーチンをリンクしないようにすることも
できますが、動作が不安定になったり場合によっては強制終了の原因にもなることが
あります。

http://www.nitoyon.com/vc/tips/light_exe.htm
http://hp.vector.co.jp/authors/VA000092/win32/vc-tech.html
http://hp.vector.co.jp/authors/VA016117/tinyexe.html

また、MS系のコンパイラはデフォルトの設定では実行ファイルのサイズを自動調整してある
一定のサイズに合わせ、無駄な空き容量を作成するのでその辺りも見直すといいかも。
これらの裏技を使用すればVC++6.0にて最小値4KBくらいの実行ファイルが作成できたことが
あります。
でも、さすがにアセンブラ(NASMなど)で作成したときには敵いませんが...(最小値1KBと
いう脅威)。

VC++2005ではランタイムがマルチスレッドのみになったみたいで、またこれらの裏技が使用
できなくなったみたいです。(残念)



YU

リンク

2006/9/23(Sat) 07:27:03|NO.2566

strcmpのようなCのランタイムライブラリの関数はmsvcrt.dllを呼び出すことで使用できます。
ちなみにAPIにもlstrcmpなどの文字列操作命令が多くあります。
#uselib "msvcrt.dll"
#cfunc strcmp "strcmp" sptr,sptr #uselib "kernel32.dll" #cfunc lstrcmp "lstrcmpA" sptr,sptr mes strcmp("abc","ABC") mes lstrcmp("ABC","DEF")
>しかし、なぜ、新しく作られたりしないのでしょうか?
>ランタイム(?)の大きさとか、製作者様の時間とかの問題でしょうか・・・。
HSPは3.0になってから新しい機能などは新命令の追加ではなく、APIやCOMを使って実現するようになっているようです。
>でも、DLLのサイズが最低28Kになってしまうのです。
サイズを2~3Kにする方法もありますが、いまどき数十〜数百K程度のサイズなど気にする必要ないと思います。



kou2A

リンク

2006/9/23(Sat) 11:22:43|NO.2571

>関数を使わなくても比較できるからです。

そうだったのですか!
これは知らなかったです!
というよりは、文字列の比較はしないほうがいいとどっかで聞いた気がするんです。
フツーに使えたんですね。

>64KB以上になったりします
それは大きいですねー。

>サイズを自動調整
これは多分そうなってる気がします。ファイルサイズがいつも
何KBごとかに突然増えるので。
ちょっとそれを調べてみます!

>文字列操作命令が多くあります
なるほど。
使いたかったら、勝手にAPIを呼び出せばいいというわけですね。
他にやりたいことが出てきたら、試してみます!

>気にする必要ないと
僕自身は気にしないのですが、
それを使用する人のために、できる限りはしておこと思いました。


助言していただいた方々、的確な回答をどうもありがとうございました。
色々参考になりました。これからもよろしくお願いします。

では、失礼します。



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