2

Windows 7 を実行している 2 台のコンピューターに異なるバージョンの CRT が読み込まれていることが原因ではないかと思われるエラーが発生しました。

私のプログラムは、別の EXE によってロードされる DLL です。Visual Studio 2008 SP1 を使用してコンパイルされています。

4

2 に答える 2

4

Al Keppが答えたように、DependencyWalker「Depends.exe」を使用できます。動的にロードされるDLLの場合、ライブラリをロードするときにアプリケーションをプロファイリングするのが最善の方法です。

Dependency Walkerで、DLLではなくEXEを開きます。次に、[プロファイル]->[プロファイリングの開始]をクリックします。アプリケーションで引数が必要な場合は、開いたウィンドウで引数を指定できます。それ以外の場合は、[OK]をクリックしてプログラムを起動します。プログラムが開いたら、通常の方法で使用して、DLLをロードします。DLLがロードされたので、Dependency Walkerでツリーを参照して、使用されているCRTのバージョンを確認できるはずです。

バージョンが表示されない場合は、[C:\]ボタンをクリックして、フルパスがツリーに表示されていることを確認してください。

マニフェストをチェックすることで、アプリケーションまたはライブラリが要求しているCRTのバージョンを確認することもできます。マニフェストは通常​​、DLLまたはEXEに含まれていますが、常に含まれているわけではありません。Visual Studioで、[ファイル]->[開く]->[ファイル...]をクリックし、EXEまたはDLLを選択します。RT_MANIFESTリソースを開くと、CRTを依存関係とバージョンとしてリストするXMLが表示されます。

于 2011-01-25T20:57:29.013 に答える
1

DLL ファイルでこれらの言語ライブラリを使用するほとんどのアプリケーションは、単に Windows ディレクトリにあるこれらの DLL の最新バージョンを使用します。なんらかの理由で特定のバージョンが必要な場合、おそらく最も簡単にできることは、正しいファイルを exe と同じディレクトリに置くことです。

Dependency Walker アプリケーションを使用して、起動時にどの DLL ファイルがプロセスに読み込まれるかを確認できます。マイクロソフトのサイトから無料でダウンロードできます。

于 2011-01-21T15:33:33.500 に答える