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がエラー無く利用できるようになる。