Исключение среды выполнения COM при создании экземпляра в Windows 7 / Win Server 2008

У вас может быть несколько советов на этой странице: http://www.echelon.com/support/kb/solution.asp?solutionID=668

Эта страница почти точно описывает мою ситуацию. Однако руководства там не подходят.

  1. Как я вижу, DEP не может завершить работу в W7 / WS2008.

  2. Пути в editbin (и их способ использования) переписаны в VS2010

  3. Ходят слухи, что 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 бит;

Другие вопросы по тегам