Когда я пишу программу на c ++ (например, B3DTest.exe), зависит от сторонней библиотеки DLL (например, B3DViews.dll) (поставщик - небольшая компания).Программа, которую я написал, очень проста - просто протестировать одну функцию в dll.Когда я запускаю свою программу (необходимый заголовочный файл, файлы .lib и файл .dll связаны).Я сталкиваюсь с проблемой ниже.
The application failed to initialize properly (0xc0150002). Click on OK to terminate
the application.
Я обнаруживаю, что программа завершается, прежде чем войти в мою основную функцию.Выход IDE vs2008
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 и помещаю его в dir так же, как 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.