だいぶ前に作ったプログラムを起動してみたらなぜか例外が発生。
「BadImageFormatExceptionはハンドルされませんでした。」
以前はちゃんと動いてたのに、なぜ?
いろいろ原因を考えてて、春先にPCを入れ替える時にOSを64bit版に切り替えていたのを思い出した。
DLLを呼び出しているプログラムなので、もしやと思ったら、プラットフォームターゲットが「Any CPU」になっている。これだとプラットフォームに合わせて64bitでビルドされてしまうっぽい。ちなみにプログラム本体はC#なんだけど、呼び出しているDLLは32bitでビルドされている。
メインのプログラム(64bit) —呼び出し—>DLL(32bit)
こうなっちゃうと呼び出しのタイミングで、上記のような例外が発生する。
ってことで、ターゲットを「x86」に変更して、ビルドしたら無事に動くようになりました。
しかし、こういうの、なかなか気付かないよな。もうちょっと分かりやすいエラーで処理して欲しい。
2013/10/23 追記
CorFlagsというツールを使うと、ビルド後でも変更ができるらしい。
ビルド後の .NET アセンブリを 32bit で動作させる方法
2019/03/25 リンク切れだったため、URLを削除した。