2

Visual Studio 2005 でビルドされた混合モードの DLL があります。Dependency Walker で、私の DLL は次の CRT DLL の依存関係を示しています。これは私の Windows 7 開発マシン上にあることに注意してください。

c:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCP80.DLL

"\MSVCR80.DLL

"\MSVCM80.DLL

8.0.50727.4927

Visual Studio 2005 を使用している私の Windows 7 開発マシンでは、これは正常にコンパイルおよび実行されます。問題は、最新の CRT がインストールされている Windows XP テスト マシンで実行できないことです。

DLL を XP マシンの depenency walker にドラッグすると、\System32 で DLL を検索しているようです... (フル パスを表示しようとしたところ、それらのパスはなく、黄色の感嘆符だけでした)

問題は、WinSxS の crt のこのバージョン (ビルド 4927) が XP テスト マシンにインストールされていないことです。最新の CRT がインストールされた Visual Studio 2005 (sp1?) があります。

8.0.50727.4053は、MSDN で見つけた最新バージョンです。

これは SO に投稿された最もエキサイティングな質問ではないことを認識していますが、この 4927 ランタイムがどうなっているのか知っている人はいますか?

* 編集 *

MT.exe によって生成されたマニフェスト:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

したがって、ターゲットとしている 3 つの異なるバージョンがあります...

4

1 に答える 1

1

リビジョン 4927 は Windows 7 固有のバージョンで、おそらく Microsoft バイナリで使用されています。ビルドは依存関係を作成しないでください。4053 は VS2005 の最後のものです。これをdepends.exeでトラブルシューティングしないでください.winsxsの依存関係を追跡するのは得意ではありません.

ビルドが生成する依存関係を再確認して、このトラブルシューティングを開始します。最初に vc\include\crtassem.h を確認すると、_CRT_ASSEMBLY_VERSION マクロがマニフェスト エントリを生成します。次に、実行可能ファイルに埋め込まれているマニフェストを確認します。プロジェクトの Release ディレクトリには、埋め込まれた .embed.manifest ファイルが含まれています。また、実行可能ファイルの [ファイル] + [開く] + [ファイル] を使用すると、実際に埋め込まれた RT_MANIFEST リソースを確認できます。

于 2010-11-16T16:28:16.423 に答える