Когда я пишу программу на С++ (например, B3DTest.exe), она зависит от сторонней dll (например, B3DViews.dll) (поставщиком является небольшая компания). Программа которую я написал очень проста всего лишь для проверки одной функции в dll. Когда я запускаю свою программу (необходимый файл заголовка, файлы .lib и файл .dll связаны). Я столкнулся с проблемой ниже.
The application failed to initialize properly (0xc0150002). Click on OK to terminate
the application.
Я узнаю, что программа завершается до входа в мою основную функцию. результат vs2008 IDE
LDR: LdrpWalkImportDescriptor() failed to probe e:\tlh1987\vs2008projects\B3DTest\Debug\B3DViews.dll
for its manifest, ntstatus 0xc0150002
Я поместил программу и dll на другой целевой компьютер, и он отлично работает. Поэтому я думаю, что это должно быть что-то не так с моим компьютером. Я искал журнал событий, и он говорит ниже для трех событий
EventID: 32
Description: Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was The referenced
assembly is not installed on your system.
EventID: 59
Description: Resolve Partial Assembly failed for Microsoft.VC80.CRT. Reference error message: The
referenced assembly is not installed on your system.
EventID: 59
Description: Generate Activation Context failed for Generate Activation Context
E:\tlh1987\vs2008projects\B3DTest\Debug\B3DViews.dll. Reference error message: The operation completed
successfully.
Я ищу в Интернете, чтобы узнать, что кто-то решил подобную проблему, установив Microsoft Visual C++ 2005 Redistributable Package
и Microsoft Visual C++ 2005 SP1 Redistributable Package (x86).
Я скачал два файла и установил их. Однако это не сработало! Другое решение в Интернете: поместить файлы папки Microsoft.VC80.CRT, которые включают 3 dll и папку Microsoft.VC80.MFC (также включают 4 dll) и, наконец, соответствующие файлы манифеста в каталоге B3DTest.exe (моя программа) . Однако это все равно не сработало! Но что-то изменилось в event log
, где есть только 1 event error
, который говорит ниже:
EventID: 59
Description: Generate Activation Context failed for Generate Activation Context
E:\tlh1987\vs2008projects\B3DTest\Debug\B3DViews.dll. Reference error message: The operation completed
successfully.
Кто-то сказал мне, что, возможно, версия VC80.CRT и VC80.MFC на моем компьютере не соответствует номеру версии в B3DViews.dll
(который распространяется поставщиком). Затем я открываю B3DViews.dll
с помощью emacs.exe и ищу манифест, прикрепленный к dll. Он говорит ниже:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195"
processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.MFC" version="8.0.50727.6195"
processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0"
processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.MFC" version="8.0.50608.0"
processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
номер версии меня смутил. Как это может быть 8.0.50727.6195
так же, как и 8.0.50608.0
? Думаю, это должен быть один номер версии (а не два, как показано выше). Я нахожу dll Microsoft.VC80.CRT и dll Microsoft.VC80.MFC, а также соответствующие файлы манифеста (все номера версий 8.0.50727.6195
в C:\Windows\WinSxS и помещаю их в каталог так же, как B3DTest.exe
(мой Программа). Это тоже не сработало. Чтобы выяснить проблему, я использовал Dependency Walker for Win32 (x86)
для профилирования моей программы, т.е. B3DTest.exe
. Ниже написано:
Started "B3DTEST.EXE" (process 0x680) at address 0x00400000. Successfully hooked module.
Loaded "NTDLL.DLL" at address 0x7C920000. Successfully hooked module.
Loaded "KERNEL32.DLL" at address 0x7C800000. Successfully hooked module.
DllMain(0x7C920000, DLL_PROCESS_ATTACH, 0x00000000) in "NTDLL.DLL" called.
DllMain(0x7C920000, DLL_PROCESS_ATTACH, 0x00000000) in "NTDLL.DLL" returned 1 (0x1).
DllMain(0x7C800000, DLL_PROCESS_ATTACH, 0x00000000) in "KERNEL32.DLL" called.
DllMain(0x7C800000, DLL_PROCESS_ATTACH, 0x00000000) in "KERNEL32.DLL" returned 1 (0x1).
Injected "DEPENDS.DLL" at address 0x08370000.
DllMain(0x08370000, DLL_PROCESS_ATTACH, 0x00000000) in "DEPENDS.DLL" called.
DllMain(0x08370000, DLL_PROCESS_ATTACH, 0x00000000) in "DEPENDS.DLL" returned 1 (0x1).
Loaded "B3DVIEWS.DLL" at address 0x10000000. Successfully hooked module.
LDR: LdrpWalkImportDescriptor() failed to probe e:\tlh1987\vs2008projects\b3dtest\debug\B3DViews.dll
for its manifest, ntstatus 0xc0150002
First chance exception 0xC0150002 (Unknown) occurred in "NTDLL.DLL" at address 0x7C9873BE.
**Second chance exception 0xC0150002 (Unknown) occurred in "NTDLL.DLL" at address 0x7C9873BE.**
Exited "B3DTEST.EXE" (process 0x680) with code -1072365566 (0xC0150002).
Это сводит меня с ума. Я не хочу разбираться. любая помощь приветствуется!
Это(http://www.codeguru.com/forum/showthread.php?t=408061) может решить проблему. Но я не могу понять это, читая это. моя система - Windows XP SP3, и я использую VS2008. Я не устанавливал VS2005.