LDR:LdrpWalkImportDescriptor()ソリューション


今日はオープンソースプロジェクトをコンパイルして、彼が提供したのはVC 9の工事で、私の側はVC 10で、まず、開いた後に変換する必要があります.すべて正常で、それからコンパイルして、簡単な小さなエラーが発生して、変更してからコンパイルして通過しましたが、実行時に下図に示すエラーが発生しました.
「アプリケーションの正常な初期化(oxc 0150002)」に失敗しました.「OK」をクリックして、アプリケーションを終了します.
次に、出力情報をデバッグして、次の情報を表示します.
LDR: LdrpWalkImportDescriptor() failed to probe F:\......\libpng.dll for its manifest, ntstatus 0xc0150002  
   ::                         
  “[1964] Helloworld-win32.exe:   ”   ,     -1072365566 (0xc0150002)。

このような場合は多く見られますが、一般的にはリンクライブラリの問題で、ネット上でこの問題を聞くことも多いので、ここで説明します.エラーメッセージはlibpngです.dllの問題ですが、このdllを開けてチェックしましょう.次の図は、dllのバージョン情報です.
基本的にこのバージョンの情報にも間違いは見えませんが、以下はDLLのバイナリ情報しか表示できません.開いてから、やっと問題が見つかりました.下図のように:
選択されたセクションには、「name="Microsoft.VC 90.DebugCRT"version="9.0.21022.8"が含まれています.ここでのname値は、DLLのコンパイルに使用するVC 9を示しています.0はまだDebugバージョンで、version値はバージョン番号で、本当に少し憂鬱で、リリースである以上、なぜDebugバージョンをコンパイルするのですか?Debugバージョンは互換性の高い環境が必要ですが、releaseバージョンではこれらの問題は発生しません.この問題をどのように解決しますか?
方法1:VC 10をアンインストールし、VC 9を改装するのは面倒で、考えません.方法2:対応するバージョンの“Microsoft.VC 90.DebugCRT”をsystem 32にコピーして、普通VCのインストールディレクトリの中のredistフォルダの下に位置して、下図のように、選んだDebug_NonRedist(その下のx 64およびx 86)はDebugバージョンで使用されていることを示し、他の2つのx 64およびx 86はreleaseバージョンである.ここのスクリーンショットはしばらくVC 10で、パスは:Microsoft Visual Studio 10.0VCredistDebug_NonRedist\x86
方法3:libpngのソースコードを直接見つけて、自分でDLLをコンパイルします(個人的にはこの方法をお勧めします).そのため、このような互換性のない状況が発生しないように、今後、プログラムを公開する際にも注意する必要があります.