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 つの異なるバージョンがあります...