我々はAS400と話をしなければならないwinforms applictionを持っています。これを行うために、私たちはWinformsアプリケーションにIBM.Data.DB2.iSeriesクラスをインポートし、マシン上でIBM System Access for Windowsを使用しました。 System I Accessを持っている必要があります。または、AS/400と通信しません。私の64ビット開発マシンではすべてうまく動作します。クライアントの64ビットマシンでも正常に動作します。しかし、32ビットマシンにインストールしようとするとBad Imageフォーマット例外が発生します。私たちは、CPUの代わりにx86インストーラだけを作成しようとしましたが、それは動作しませんでした(同じ悪いイメージ例外)。何か案は?32ビットと64ビットのマシン間の不正なイメージフォーマットの例外
答えて
あなたのプログラムを32ビットにコンパイルしても、どこかでまだ64ビットのdllをロードしようとしています。サードパーティ製のdllは32ビットだと言っているので、残っているのはあなたのdllです。
ソリューションプラットフォームをx86に設定することで確認できます。次に、x86に設定されているすべてのプロジェクト(exeとdll)を確認します。彼らのうちの1人がプラットフォームターゲットをx64に設定していると思われる。プロジェクトを右クリックしてプロパティ、ビルドタブ - >プラットフォームターゲットを選択してチェックします。
また(「Configuration Managerを...」を選択メニューバーにソリューションプラットフォーム]ドロップダウンから、すべてのDLLが実際にConfiguration Managerで構築するために設定されていることを確認してください。
私たちが知りませんでしたx64 dllが見つかりました – Anthony
あなたのアセンブリに何が問題なのかよく分かりませんが、あなたのビルドの実行可能ファイルと動的ライブラリファイルのPE file validatorとcheck the magic numberを試してみてください。
具体的には、詳細な検証を実行する前に、最初のチェックとして各ファイルが0x10b
または0x20b
で始まるかどうかを確認してください。 PEiDのようなツールでこれを簡単に行うことができます。
正誤表に記載されているように、バイナリの1つが64ビットである可能性が非常に高いです。これは、a debugger that can resolve dependenciesを使用して見つけるのが最も簡単ですが、これは法的には扱いにくいかもしれません。
あなたは、に加えて、x86のクライアントライブラリを持っていますかx64の場合は? –
はい私たちは、クライアントにマシンに32ビットバージョンがインストールされていることを確認しましたが、最初にIBM.Data.DB2.Iseries dllをインストーラーに含めようとしましたが、うまくいきませんでした – Anthony
かなり古典的IBMの問題。その会社はサポート呼び出しから生き残る。 –