2009/02/26(Thr)実験 - デリゲートの渡し方

はてブ数 2009/02/26 8:37 プログラミング::C# つーさ

匿名メソッドの速度とか、どう渡すのが一番速いのかなー。
ちょっと気になったので。(1)~(4)で一番速いのはどーれだ。

class Test
{
  class A { public int a; }
  class B : A { }
  void DeA(A obj) { obj.a++; }
  void DeB(B obj) { obj.a++; }
  void DoB(Action<B> act) { act(obj); }

  DoSomething()
  {
    DoB(DeA); // (1)
    DoB(DeB); // (2)
    DoB(delegate(B obj) { obj.a++; }); // (3)
    { // (4)
      Action<A> act = delegate(A obj) { obj.a++; });
      DoB(new Action<B>(act));
    }
  }
}

それぞれ1000万回の実行時間を計った。

続きを読む

2009/02/08(Sun)指定した正規表現にマッチしなくなる操作をキャンセルするテキストボックス

はてブ数 2009/02/08 6:02 プログラミング::C# つーさ

追記: TextBox.Validatingでできそうです。車輪の再発明だった模様。

指定フォーマットを入力させたいとき、MaskedTextBoxは便利なんだけど、int型を受け取りたいとか、double型を受け取りたいとかそういう目的にはイマイチ使い勝手が悪いような気がしたので作ってみた。

たとえば、ユーザにdouble型を入れて欲しい場面があった。

ユーザがちゃんと入れてくれることを信じるわけにはいかないので、double.TryParseでエラー処理を書くのはもちろんなのだけど、その前の段階で少しでもエラーをサプレスできないかなと思った。

そして好奇心からごりごりとWin32で作ってみた。

デザイナで配置してRegExPatternプロパティに

^-?\\d*(\\.\\d*)?$

とか、書く。操作後マッチしなくなるような操作は受け付けない*1。Win32で作ったので、x64では動かないかもしれない。WindowsXPでは動いてるが、他のバージョンでは動かないかもしれない。そんなことをするくらいなら、素直にTryParseのエラー処理だけしておくべきなのだとも思うが。まぁ、好奇心だから。

最近、Win32のプラットフォーム呼び出しにあんまり抵抗がなくなってきた。やばいなぁ。

続きを読む

2008/12/16(Tue)GSDKでゲームを作ろう [0]

はてブ数 2008/12/16 21:58 プログラミング::GSDK つーさ

GSDKとは、xnaの前身であるManagedDirectXを薄めにラッピングして、
割と2D描画に特化させたゲーム作りのフレームワークなのだ。
GSDの、Quest of Feena とか ぱねりあ はこれを使って作られている。

まぁ、こいつを使ってゲームでも作ってみようかという話。
げーむふれーむわーく を検索

続きを読む

2008/02/24(Sun)autoFPS フレームスキップ モジュール

はてブ数 2008/02/24 18:04 プログラミング::HSP3 つーさ

ゲーム向け?の言語のくせに、フレームスキップとかやってくれる命令ないですよね。
await は半端だし、フレームスキップの処理とか割とFAQなんじゃないのかな。
HSPで解説してるとこあまり見ないなぁ。
まぁ、DirectXとか使えば、その辺勝手にやってくれるし、標準命令でゲーム作る人あまりいないのかも。
まぁ、元々標準命令でゲーム作るんなら速度は出ないし、そんなもん気にしないで済むように作れってことなんだろうなぁ。
まぁいいや、とりあえずモジュール化しちゃえ。

このモジュールはスクリプトに組み込んで自由に使用できます。

続きを読む

2008/02/07(Thr)Win32 コンソール向きパイプ通信モジュール

はてブ数 2008/02/07 1:33 プログラミング::HSP3 つーさ

何で今更こんなモノ、とか思わないでもない。
というか、誰か似たようなモノ作ってるんじゃないのかなぁ、
という感は否めないんだけど(笑
しかも、何に使うんだコレ(笑x2

今回は思ってたより時間かかってしまったなぁ。
予想+1時間くらい。コード量も+100行くらい。

なんで、pipe2なのかといえば、hspextのpipeの代替だから。
特にpipeputは呼び出しただけでシステムエラーに^^;

このモジュールはスクリプトに組み込んで自由に使用できます。

続きを読む

2008/02/02(Sat)アンチエイリアス文字描画モジュール

はてブ数 2008/02/02 15:00 プログラミング::HSP3 つーさ

久しぶりに若干バージョンアップしたのでage.
2008. 2. 2 / ver 0.20 縦に描画位置がズレる問題修正と描画高速化。
2008. 5.14 / ver 0.21 描画クリップ枠が上に1pxズレていて落ちてしまう問題の修正。

mes命令に比較するとかなり重い(APIが重いから)ですが、
フォントからグリフを得て描画することにより、
綺麗で目に優しい文字を描画することができます。

このモジュールはスクリプトに組み込んで自由に使用できます。

続きを読む

2008/01/18(Fri)漢字の読みを得るには

はてブ数 2008/01/18 15:31 プログラミング::HSP3 つーさ

2012.08.04追記。Windows8 RP対応。

MSIMEのCLSIDがかわっていて動かない。
CLSIDを直で書いていたのを、アプリケーションIDからCOM作ってQueryするように変更。
RTM版ではどうなるかわからないけど、たぶん前のWindowsとは互換性がなくなるのだろう。
追記ここまで。


難攻不落と思われた漢字逆変換問題だが、
A_Aと名乗る人物のたった一行の書き込みにより、
事態は急速に解決へと向かったのであった。

というわけで、モジュール化してみた。

春日の山に が しゅんじつのやまに とか出てくるが、
そこはご愛敬なのだと思う。

続きを読む

2007/10/12(Fri)HSPでキーフックしたいよ!

はてブ数 2007/10/12 19:19 プログラミング::HSP3 つーさ

Zip (4.93KB)

キー入力がフックできたらいいじゃない?
HSP3でキーボードフックを行うDLL+スクリプトです。
onkeyライクな命令で誰でも簡単に扱うことが可能(かも)。

#include "keyhook.hsp"
	khHook *onKeyHook ;//フックをセット
	if stat=0 : dialog "フック失敗" : end
	stop

*onKeyHook
	;// キーコードについては、getkeyのヘルプを見るか、「仮想キーコード一覧」でネットを検索すること。
	mes "Code:"+ khKeyCode + " Name:" + khKeyName + " Stat:" + khStat 

	if khKeyCode == 65 : return 1 ;// 試しにAだけ入力できなくしてみる。
	return

小さいDLLを作るためのヒントになるかもしれない.vcproj付き。

※ ライセンスと免責事項
公序良俗に反しない限り自由に使用可。
作者はDLLの本体とそれが組み込まれた成果物について一切の品質を保証せず、
DLLの本体とそれが組み込まれた成果物によって起きた損害に対して一切の賠償責任を負いません。

キー□ガーとか、キー口ックソフトとか作れますが悪用厳禁でお願いします。
まぁ、普通のDLLなのでHSP以外からも使えば使えるはずです。

※ 履歴
2007/10/15 05:47 - キー入力を無効化した場合でも他のフックに通知するようにした。
2012/11/13 02:27 - LowLevelKeyboardHookをサポート。