Исключение среды выполнения COM при создании экземпляра в Windows 7 / Win Server 2008
У вас может быть несколько советов на этой странице: http://www.echelon.com/support/kb/solution.asp?solutionID=668
Эта страница почти точно описывает мою ситуацию. Однако руководства там не подходят.
Как я вижу, DEP не может завершить работу в W7 / WS2008.
Пути в editbin (и их способ использования) переписаны в VS2010
Ходят слухи, что NXCOMPAT больше не действует?
Небольшое описание проблемы,
Старый файл DLL примерно 2000 года (возможно, C++, но также может быть VB6). Это Interop COM DLL, которая использовалась в течение нескольких лет в нашей старой (VB6) среде. DLL подключается в VS через "Выбор элементов ToolBox / COM-компонентов". Затем добавил dll к проекту в качестве ссылки. Я утверждаю, что этот код запускается из консольного приложения (чтобы избежать ошибок, связанных с IIS).
Когда код пытается загрузить экземпляр объекта, отображаются ошибки.
Creating an instance of the COM component with CLSID {104B7F00-06EE-11CF-9AE0-0020AFD34749} from the IClassFactory failed due to the following error: 80040023.
Каковы ваши идеи здесь? Как вы решили проблему с COM (в Windows 7 / Vista / Win Srv 2008?)?
2 ответа
1) Кажется, я не понимаю: "Как я вижу, DEP не может завершить работу в W7 / WS2008". Да, вы можете отключить DEP в Win7. Пожалуйста, смотрите здесь: http://www.fanhow.com/knowhow:Enable_or_Disable_DEP_in_Windows_7_270197372) в VS2010 есть editbin здесь (измените этот путь в соответствии с вашим установочным диском): C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\ Bin\editbin.exe. Откройте командную строку Visual Studio, и вы должны просто использовать ее, не зная пути к ней. 3) Я не думаю, что это так. В противном случае этот переключатель будет устаревшим. Документ MSDN, похоже, не предлагает это: http://msdn.microsoft.com/en-us/library/ms235442(v=vs.100).aspx
И GUID, и сообщение об ошибке указывают на то, что вы имеете дело с проприетарным компонентом. Таким образом, документация, отличная от упомянутой в описании проблемы, здесь не поможет. Итак, другая идея заключается в том, чтобы подключить WinDbg к процессу и посмотреть, откуда на самом деле происходит исключение. Тем не менее, без символов / источников для проприетарного компонента выявление и устранение проблемы кажется нетривиальной задачей.
Чаевые:
- проверить рунтинные модули;
- использовать Зависит, чтобы обнаружить недостающие модули;
- используйте подсказки в этой ссылке для взаимодействия 32/64 бит;