Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

msvcp90.dll depends on wrong msvcr90.dll?

I have a dll project built with VS2008 (amd64). The manifest of the dll say

<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />

When I load the dll into DependencyWalker it refers to winsxs-directory

amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251

How can that happen? Isn't this whole manifest-thing meant to avoid situations like that by giving every dll/exe the information which version it is built with and therefore the CRT-version it depends upon?

And the second, even more confusing thing is that the msvcp90.dll depends on msvcr90.dll but the msvcr90.dll cannot be found!?! Hey, it's in the same winsxs-directory together with msvcm90.dll and msvcp90.dll! If I copy the right msvcr90.dll in the same directory as my dll it works! (But again, isn't that the situation we had in DllHell times? And shouldn't that msvc*.dll-copying should be over since we have manifests???)

I would be really grateful if anyone has an explanation for me!

like image 521
mig Avatar asked Nov 13 '22 15:11

mig


1 Answers

With manifest, Microsft had introduced a new kind of "dll hell" to resolve "dll hell" :(

By the way, the last version you are referencing (9.0.30729) is the MSVCR9 CRT upgraded to SP1. May be you could try to update your VS2008 with this version to "synchronize" the manifest.

like image 86
Stef Avatar answered Dec 16 '22 01:12

Stef