WindowsServer2012(64bit)で、zip32.dllを利用しようとすると「間違ったフォーマットのプログラムを読み込もうとしました。」エラー

http://d.hatena.ne.jp/none53/20100707/1278470575
c#で以下のようなコードを利用してzip32.dllを呼び出し、圧縮を行うプログラムが64bit環境で実行するとシステムエラーになった。

[DllImport("ZIP32J.DLL", CharSet = CharSet.Ansi)]
private static extern int Zip(
IntPtr hwnd, // ウィンドウハンドル
string szCmdLine, // コマンドライン
StringBuilder szOutput, // 処理結果文字列
int dwSize); // 引数szOutputの文字列サイズ

発生するエラーは以下。

System.BadImageFormatException: 間違ったフォーマットのプログラムを読み込もうとしました。 (HRESULT からの例外: 0x8007000B)

原因は、64bit(c#で作成したzip32.dllを利用するプログラム)と32bit(zip32.dll)が混ざっていることらしい。
対策は、プロジェクト→ビルド→プラットフォームターゲットをx86に設定してビルドすること。
これによってc#で作成したzip32.dllを利用するプログラムも32bitで動作するようになり、DLLがエラー無く利用できるようになる。