2012-03-15 11 views
2

我々は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ビットのマシン間の不正なイメージフォーマットの例外

+2

あなたは、に加えて、x86のクライアントライブラリを持っていますかx64の場合は? –

+0

はい私たちは、クライアントにマシンに32ビットバージョンがインストールされていることを確認しましたが、最初にIBM.Data.DB2.Iseries dllをインストーラーに含めようとしましたが、うまくいきませんでした – Anthony

+3

かなり古典的IBMの問題。その会社はサポート呼び出しから生き残る。 –

答えて

5

あなたのプログラムを32ビットにコンパイルしても、どこかでまだ64ビットのdllをロードしようとしています。サードパーティ製のdllは32ビットだと言っているので、残っているのはあなたのdllです。

ソリューションプラットフォームをx86に設定することで確認できます。次に、x86に設定されているすべてのプロジェクト(exeとdll)を確認します。彼らのうちの1人がプラットフォームターゲットをx64に設定していると思われる。プロジェクトを右クリックしてプロパティ、ビルドタブ - >プラットフォームターゲットを選択してチェックします。

また(「Configuration Managerを...」を選択メニューバーにソリューションプラットフォーム]ドロップダウンから、すべてのDLLが実際にConfiguration Managerで構築するために設定されていることを確認してください。

+0

私たちが知りませんでしたx64 dllが見つかりました – Anthony

2

あなたのアセンブリに何が問題なのかよく分かりませんが、あなたのビルドの実行可能ファイルと動的ライブラリファイルのPE file validatorcheck the magic numberを試してみてください。

具体的には、詳細な検証を実行する前に、最初のチェックとして各ファイルが0x10bまたは0x20bで始まるかどうかを確認してください。 PEiDのようなツールでこれを簡単に行うことができます。

正誤表に記載されているように、バイナリの1つが64ビットである可能性が非常に高いです。これは、a debugger that can resolve dependenciesを使用して見つけるのが最も簡単ですが、これは法的には扱いにくいかもしれません。