型のサイズ
C++ .NETアプリケーションで、ちょっとトリッキーな(禁じ手?)をやってまして、例えばプラットフォームSDKで定義されているDWORDを使用せず、独自にtypedef unsigned long DWORD;
といったエイリアス的な型定義をしているところがあったんです。(このC++ .NETで作られたDLLとC#のアプリケーションが連動するので、.NET寄りな意識が働いているようでした。またwindows.hはインクルードしたくなかったみたい。)で、こいつが起因して、メモリの内容がうまく取得できたり、出来なかったり。
そりゃそうだ、と。DWORDは32-bit unsigned integerで、windows.hでtypedef unsigned long DWORD;
と定義されているわけです。で、片や.NETにおけるlongは64-bit signed integerです。
つまりは、こういうことかと。32-bit unsigned integer(windows.hにおけるDWORDの定義)でなければならないのに、64-bit unsigned integer(独自のDWORDの定義)になっているために、メモリをぶっこわしていたんだな、と。
いや~Pen4 1.6GHzでアプリケーションを実行するとメモリの内容は正しく取得できるのに、Pen4 3GHzだと正しく取得できないという、ちょっとレアな状態に見えたので、ホント悩みました。CPU依存・・・、あぁintって処理系依存だったなぁ・・・。なるほど。って対策した後に気づきました。一安心です。
Comments