x64のmanifestによる意外な落とし穴

ちょっとx64のプログラムでテストをしていたときに起こった出来事をひとつ。

プログラムを終了させる動作を仕様としてウィンドウを閉じようとすると、何も起こらない。

たしか、MessageBox関数をつかってメッセージボックスを出すようにしてあったのになぁ~と。

デバッグで動作できない環境だったのでReleaseで逆アセンブルしてデバッグ。

MessageBoxのところにブレークポイントを設置して動かしてみると、戻り値は0でした。

エラーが起きているのか・・・ということで、GetLastErrorによる確認をしてみると、これも0(つまりNoError)

・・・ちょっと・・・何が起こったのでしょうか?私、何か悪いことしました・・・?と問いかけたくなる心境に。

ふつうにMessageBoxだけ表示するプログラムではふつうに表示されるし・・・。

で、結論をいうと、manifestに書いていたダイアログなどをXPStyleにする項目の問題でした。

通常はwin32(x86)と記述するのですが、どうやらあの表記があるとアセンブリの読み込みが出来なくて、スタイルの変更を間違えて表示できなくなるという問題が起こるようで。

まさかそんなところに問題があるなんて・・・と思いながら、その表記だけをはずして再度作り直しましたとさ。

はじめから作る分には、ちょっと書き方に気をつければx64とx86はほとんど同じコードになるのですが、そんなところで問題が出てもそれはわかりません、て。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この記事のトラックバック用URL