5

私はもともと、VC9.0を使用してwin732ビットでwin32アプリケーションを設計しました。最近、win7 64ビットにアップグレードし、前のアプリケーションをビルドして実行しようとしました。

ビルドは正常に実行されますが(win32アプリケーション)、実行時に「[...]はコード-1073741701(0xc000007b)で終了しました」というエラーが表示されます。

これは、[意図された]32ビットdllの64ビットバージョンをロードした結果だと思います。

このプロジェクトの具体的な依存関係は次のとおりです。SDL.libSDLmain.libSDL_ttf.libopengl32.lib glu32.lib wininet.lib

SDLとSDL_ttfは32ビットバージョンのみです。Win32アプリケーションを要求すると、VisualStudioは\syswow64内のopenglファイルとglulibファイルをフェッチするのに十分賢いと思います。

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

ありがとう、

4

1 に答える 1

8

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

最初のステップは、実行可能ファイルで dumpbin.exe を実行して (VS コマンド プロンプトを使用して PATH で取得します)、アーキテクチャが期待どおりであることを確認しますdumpbin.exe /headers foo.exe。ファイル ヘッダーの出力に、「x86」または「x64」の「machine」値が表示されます。オプションのヘッダー出力では、"PE32" (x86 の場合) または "PE32+" (x64 の場合) のマジックが表示されます。

次のステップは、実行可能ファイルのアーキテクチャ (x86 または x64) に応じて、www.dependencywalker.comで入手できる適切な依存関係ウォーカーを実行することです。このツールは、同じアーキテクチャではない検索パスへの依存関係を見つけるかどうかを通知する必要があります。

依存関係ウォーカーが問題を発見した場合、問題のあるライブラリを同じアーキテクチャのライブラリに置き換えるか、検索パスに基づいて正しいライブラリが正しくないライブラリの前に配置されるようにします。

于 2011-03-21T00:58:24.173 に答える