Anycpu
昨夜は早速64bit環境で開発テストとかしてましたー。
ってゆーか、テストっつーか例のファイルコピーツールをデバック出来るか試してみたって感じなんですけどね。
で、いきなり出来なかったわけで。
世の中64bitで動く32bitアプリはフツーに出回ってるけど、作る側は多少気にしなきゃやっぱダメなんだなぁって話。
なんでダメだったかっつーと、結局は.NETビルド時の対象CPUの指定でダメになるって話だったワケですが。
VisualStudioでデフォルトで.NET関係のプロジェクト作ると、対象CPUが初期値で「Anycpu」設定になるんですが。
Anycpu設定だと、64bit OS上だと.NETが64bitモードで動作するようで。
具体的に言うと、IntPtrとかが64bit幅になるとか、ポインタサイズも同様とかそんな感じ。
件のファイルコピーツールはP/InvokeとかCOMとかでガンガンWin32 APIを叩いてる。
で、問題はその辺のCOMとかWin32 APIのポインタが(まだ正式に調査してるわけでないので、予測の範疇だけど)、サイズが32bitらしい。
まぁ、32APIだから当然なのかも知れんけど、その辺の境目とか調べないとなぁ・・・と。
とりあえず、ファイルコピーツールに関しては初期化時に例外吐いてダメでした。
一応、対象CPUの設定を「x86」にすれば問題なし。
そこに関しては調べたんだけど、対象CPUが「x86」ならば64bit OSでも.NETは32bitモードで動作するそうです。
んー・・・とりあえず、今後は.NETで開発するときはx86にするか、Anycpuで32bit/64bitで動作するようにキモに銘じとかないとなぁ。
とりあえず、MS公式の64bit関係の開発指針をメモ代わりにリンクしておくか(をい
トラックバック URL :