VS2012とExの罠

久々にVS2012ネタ。

VS2012でXPベースの組み込み向けOS「WES2009」の
ソフトウェアを作っていて、盛大にハマった・・・

元々VS2012がリリースされた当初は、
XPがサポートされていなかったんだけど、
Update1からプラットフォームのツールセットに
「Visual Studio 2012 – Windows XP (v110_xp)」
ってのが追加されてXPでも動作可能になったんだよね。
VS2012 + XP 1
これを切り替えるだけでXPでも動く・・・
と思っていて、開発当初は実機もなくて試せなかったけど、
特に気にせず開発を進めていた。

一通り機能を実装し終えた頃に実機が到着。
いざ、動かしてみると・・・
VS2012 + XP 2
えっ・・・(゜Д゜)

XPのサービスパックの問題かと思ったけど、ちゃんとSP3・・・

色々と調べていると、同じエラーでハマってる方を発見。
Visual Studio 2012でXP用のプログラム
原因は、プロジェクトのプロパティ- リンカー – システム – サブシステムの項目が空欄になっていたことだった。これだ!ってことで早速確認してみると、
VS2012 + XP 3
案の定空になってた^^;
なんで空になっていたのかは不明・・・
改めて新規プロジェクトを作成してみると、
ちゃんと設定されてるんだけどなぁ。。。

で、気を取り直して動かしてみる。
VS2012 + XP 4
えっ・・・(´;ω;`)

同じように色々と調べてみると、
VS2012のUpdate2で発生するバグみたいで
同じエラーメッセージが出てくるらしい。(これ
でもUpdate3で修正されているんだって・・・
既にUpdate3をインストール済みなんだけど・・・!

で、Update3を再インストールしてみたり、
Embeddedじゃダメなのかと
普通のXPで動かしてみてもダメで・・・

延々と悩んでいるときに、ふとメッセージに出てる
「InitializeCriticalSectionEx」について調べると、
すぐに原因が分かってしまった・・・!

単にInitializeCriticalSectionExがVista以降ってだけだった(汗
ここ最近ずっと普通に使ってたから気付かなかった・・・

ただVista以降でInitializeCriticalSectionを使うと
メモリリークしちゃうみたいだから、
真面目にOS毎に切り替わるように改造してやると、無事に動いた!
別にVista以降で動かす予定はないんだけどね^^;

いやーもし動かなかったらVS2010に
移植することまで考えてたから動いてくれて良かった・・・
ま、今回の原因だとVS2010に移してもダメなんだけど(苦笑)

じゃ、ゲームして寝るー
バイニー☆

test?

コメントを残す