x64システム上のwin32アプリケーションを備えたランタイムエラー(dllロード)、0kをコンパイルしながら

StackOverflow https://stackoverflow.com/questions/5372565

質問

私はもともと、VC9.0でWin7 32bitsでWin32アプリケーションを設計しました。最近、Win7 64ビットにアップグレードし、以前のアプリケーションを構築+実行しようとしました。

ビルディングは正常に動作します(Win32アプリケーション)ですが、実行時にエラーが発生します。[...]はコード-1073741701(0xc000007b)で終了しました。

この結果は、[意図した] 32ビットDLLの64ビットバージョンの負荷の結果だと思います。

このプロジェクトの特定の依存関係は、sdl.lib sdlmain.lib sdl_ttf.lib opengl32.lib glu32.lib wininet.libです。

SDLとSDL_TTFは32ビットバージョンのみです。 Visual Studioは、win32アプリケーションを要求しているときに syswow64にopengl and glu libファイルを取得するのに十分賢いと思います。

Wininetのせいでしょうか?それとも私は間違いを犯しましたか?

ありがとう、

役に立ちましたか?

解決

64ビットDLLを32ビットプロセスにロードしている、またはその逆のようです。これは、問題のあるDLLを追跡する方法です。

最初のステップは、dumpbin.exeを実行することです(VSコマンドプロンプトを使用してパスで取得します)。 dumpbin.exe /headers foo.exe. 。ファイルヘッダー出力には、「x86」または「x64」の「マシン」値が表示されます。オプションのヘッダー出力には、「PE32」(X86の場合)または「PE32+」(X64の場合)の魔法が表示されるはずです。

次のステップは、適切な依存関係ウォーカーを実行することです。 www.dependencywalker.com, 、実行可能ファイルのアーキテクチャ(x86またはx64)に応じて。このツールは、同じアーキテクチャではない検索パスへの依存関係を特定するかどうかを示すはずです。

依存関係者が問題を見つけた場合、修正は、問題のライブラリを同じアーキテクチャのライブラリに置き換えるか、検索パスに基づいて正しいライブラリの前に正しいライブラリが配置されていることを確認することになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top