C

C++::配置new

PC C

他人が書いたソースコードを見ていたら見慣れないものが・・・ char buf[] = (char*)malloc(1024); CLASS *cls = new(buf)CLASS(); 配置newと言って、別枠で確保したメモリをクラスに割り当ててコンストラクタを呼ぶらしい。 危険なにおいがプンプンするよー…

C#::画像の透明でないところを白く塗りつぶすよ!

PC C

デスクトップマスコットのようなもの「ブラウニーさん」、着実に開発が進んでおります。ゴミ箱の内容量256Mあたり1個のゴミオブジェクトを設置するようにしてみたら、ちょっと録画したファイル(4Gとか・・・)を消しただけで大変なことに。ゴミ屋敷すぎる。 …

C#::XmlSerializerとIEnumerable/ICollection

PC C

IEnumerable実装クラスはGetEnumeratorから要素を取得してシリアライズし、デシリアライズの際には引数の型のそろったAddを要求する。ICollectionも実装しているときは、Countで数を取得した後インデクサで要素にアクセスされる。 それ以外のフィールドとプ…

C#::IXmlSerializableとXmlRoot/XmlType属性

PC C

IXmlSerializable実装クラスにはXmlRootAttributeしか付けられない。XmlTypeAttributeを付けることができない。 XmlTypeを付けても警告はでないが、実行すると例外が発生する迷惑仕様。いらない属性は無視しておくれよう。 //可 [XmlRoot("CL")] public CLAS…

C#::XmlSerializerとXmlAttributeOverrides

PC C

XmlSerializerのコンストラクタにXmlAttributeOverridesを渡すとシリアライズ制御用属性をあと付けできる。これを使うことで、ライブラリに考慮されていない新規の派生クラスを追加するとか、特定の環境向けに要素名などを変更することが出来る。 ところで、…

C#::Enumとカスタム属性

PC C

ゲームなんかだとアイテムの種類ごとにIDを振って、そのパラメータのデータが別にあったりする。 public enum ItemID{ Apple, //りんぴ Banana, //バナナ Meet, //にく } public class ItemDefine{ int HPPlus; //HP回復量 } //アイテム効果の辞書 Dictionary<ItemID, ItemDefine></itemid,>…

C#::ポリモーフィックな型のXMLシリアライズ(2)

PC C

前回(id:lord_hollow:20090831:p2)の続き。 手を入れられないソース(ライブラリ)にある配列またはリストをシリアライズするんだけど、そこに派生クラスのインスタンスも入っているような場合。 リストに派生クラスのインスタンスを入れるには、初回の方法…

C#::ポリモーフィックな型のXMLシリアライズ(1)

PC C

XmlSerializerでポリモーフィックな型のシリアライズに挑戦だ! ちょっと前にswitch/caseして〜なんて書いたんですけど(id:lord_hollow:20090611:p1)、詳しく調べてみるとどうもそんなことしなくても大丈夫そうなので、その方法について書きます。

C#::テンペストスレッド!!!太め!多め!!

PC C

スレッドって投げっぱなしでいいのかしら? たとえば、時間のかかる処理があって、それが終わったら結果をどこかに格納して次のUIを表示するとしよう。まぁよくあるパターンだと思う。

C#::X64

PC C

従来型DLLをC#から使うときの話はid:lord_hollow:20090606:p1に書いてあるんだけども、32bit環境でずーーっと開発してきたDLLとC#アプリを64Bitマシンで動かしてみたらLoadLibraryで失敗した。 そのときのエラーメッセージは"有効なWin32アプリケーションで…

C#::プロファイリング!

PC C

ン十万する上位エディションのVisualStudioにはプロファイラというのがついていて、実行するだけで関数ごとの実行時間統計とか取れたりするんですけど、個人が趣味で使うExpressEditionにそんな機能ついているはずもなく、時間計測用関数を自作することにな…

C#::バーター

PC C

前回(id:lord_hollow:20090825:p1)の続き。

C#::配列の連結

PC C

LINQで追加されたIEnumerable用拡張メソッドにConcatというのがあって、これを使うことで二つのシーケンスを連結できる。 byte[] seq1 = new byte[]{1,2,3}; byte[] seq2 = new byte[]{4,5,6}; byte[] seq = seq1.Concat(seq2).toArray(); これで、seq = byt…

C#::メモリーリークとファイナライザとIDisposable

PC C

イベントを縦横無尽に割り当てたり、データキューだとかリストだとかにオブジェクトをガシガシ突っ込んだりしていると、うっかりメモリリークすることがある。GCありの言語であるC#にとってのメモリリークとは、GCの対象にならないまま忘れ去られることです…

C#::参照型の値渡し

PC C

C#では参照型・値型を問わず基本的に関数の引数は値渡し。参照渡しするにはrefキーワードを使用する。参照型の値渡しって何さ?引数がオブジェクトのハンドルを受け取るのさ。 参照型の参照渡しって何さ?引数がオブジェクトを参照している変数を受け取るの…

C#::RegexOptions.Singleline

PC C

正規表現において、"."(ピリオド)は任意の文字(ただし改行を除く)にマッチングする、というのが前提知識としてあったんですけど、改行コードもマッチングさせたくて"[.\r\n]+"としたら改行コードだけにマッチングしてしまって困った。 調べてみると、 (ピ…

C#::System.Text.RegularExpressions

PC C

正規表現オブジェクトが認識するパターンのうち、とてもわかりにくいもの。 (? subexpression)

C#::インターフェースを使いましょう

PC C

オブジェクト指向的には可能な限りインターフェース、というより抽象化されたクラスを使うべき。 つまり、たとえば引数の型をListではなく、IListとしたほうが、使う側からすればリストと配列両方が使えて便利でしょう、というわけ。

C#::拡張メソッドとゲームプログラミング

PC C

C#3.0に追加された構文に「拡張メソッド」というのがある。これは、既存のクラスに対して勝手にメソッドを追加してしまうという脅威の文法である。とはいえ、単なる静的メソッドの呼び出しを簡単に呼び出すための記法に過ぎないので、メソッドを追加されるク…

C#::識別せよ!

PC C

どれがどんだけ早いのか選手権ーーどんどんピューピューぱふーぱふー bool型プロパティのtrue/false 型識別(is) 属性識別(GetCustomAttribute)

C#::XmlSerializer関連Tips

PC C

サンプルのusing宣言は省略しながら適当に・・・。

C#:IXmlSerializableなクラスのnamespace

PC C

XMLの仕様にネームスペースってのがあって、こいつはxmlns属性を指定するとその子要素全部の名前空間を変更する事ができる。で、変更するときに名前をつける事ができて、たとえばxmlns:html="〜"みたいにしてやれば、以降"html:"とゆうprefixでHTML要素を使…

C#::マーシャル諸島

PC C

C#ちゅーか.NetFrameworkにはInvokeって単語がしょっちゅう出てくるぜ!C#をはじめるまで聞いた事もない単語だったぜ! とまぁ前置きは置いといて・・・全時代の遺物的アンマネージドDLLをC#から呼び出す方法について調べてみたぜ! P/Invoke(Platform/Invok…

C#::λ

PC C

C#におけるラムダ式は匿名デリゲートと同等、らしい。 型推論がしっかり働くから、varで宣言できる部分は型の宣言が要らない。ソートやらの時には重宝しそうだ。 List<int> ls = new List<int>(); Random rd = new Random(); for (int i = 0; i < 100; i++){ ls.Add(rd</int></int>…

C#::DictionaryをXMLSerializerでシリアライズしたいんですが?(2)

PC C

リファラなんかの情報からこの前(id:lord_hollow:20090206:p1)書いた方法ではSerializableDictionaryを複数含むクラスのデシリアライズができないらしいということはわかってたんだけど、時間がなくて確認できてなかったのをちょっと確認。確かにできてなか…

Text→XHTML変換アプリを作るお!

PC C

放置すること山の如しのSourceforgeプロジェクトを再利用して、というか仕切りなおしてsvnリポジトリを作った。http://sourceforge.jp/projects/txweb/前はcvsだったけど、古い資産を完全に捨てる意味でも構成管理ツールの変更を断行。 だれか手伝ってネ。(…

C#::DictionaryをXMLSerializerでシリアライズしたいんですが?

PC C

XMLSerializerでは、2引数のAddを持つDictionary<>をシリアライズできないです。 http://msdn.microsoft.com/ja-jp/library/system.xml.serialization.xmlserializer(VS.80).aspxでもIXMLSerializableを実装すればあらゆるクラスをXMLに落とせるので、わざわ…

float

PC C

浮動小数点の割り算って、浮動小数点の理屈から言えば2とか4とか8で割るときは指数部を引き算するだけだから、3とか5あたりの中途半端な値で割り算するときよりは早いんじゃないかな〜と思ってC#で五分ぐらいかけて確認してみたら全く一緒だった。しょんぼり…

準備

C XNA

ManagedDirectXはXNAになりました、と聞いてはいたのですがそんなに大差ないだろうとManagedDirectXをいろいろ調べて、立方体をぐるぐる回したりカメラをぐるぐる回したりできるようになるところまでプログラムを書いてみたわけですが、ここらでなんとなくわ…

クリティカル!

C

俺を一ヶ月悩ませ続けたスレッドの同期に失敗してデッドロックするバグが本日ついに直ったような気がする! キューの操作にばかり気をとられて終了カウンタの演算&判定をクリティカルセクションにするのを忘れていたぜ!で、この手のバグって発生するのも「…