#c #dll #visual-studio-2008 #com
#c #dll #visual-studio-2008 #com
Вопрос:
Я новичок в COM, я реализовал образец активации COM без регистрации Server.dll для загрузки с помощью Client.exe .
Я успешно протестировал сервер загрузки.dll, созданная с помощью VS2012, VS2010 для загрузки Client.exe построен с помощью VS2013, и он работает нормально.
Но на самом деле нужно использовать сервер.dll, созданная с помощью VS2008 в Client.exe построен с помощью VS2013. В настоящее время получаю ошибку ERROR_MOD_NOT_FOUND при вызове CoGetClassObject(). Я использую библиотеки ATL, совместимые с VS2008.
Мой вопрос в том, возможно ли загрузить сервер на базе COM.dll, встроенная в VS2008 для загрузки и работы Client.exe построен с использованием VS2013? Есть ли какие-либо дополнительные шаги, которые необходимо выполнить, чтобы заставить его работать.
Я использую Manifest.xml файл, чтобы обойти необходимость регистрации.
Комментарии:
1. Получение ERROR_MOD_NOT_FOUND было бы замечательно, это код ошибки winapi, а не результат HRESULT (т.Е. 0x8007007e). В противном случае это простая ошибка, связанная с отсутствием файла, не обязательно относящаяся к самому COM-серверу. Забыв развернуть CRT (например msvcr120.dll ) является традиционной ошибкой. Исполняемый файл, созданный с помощью VS2008, использует другой CRT (msvcr90.dll ), установленный в кэше winsxs и очень часто доступный случайно. Для диагностики используйте привязки загрузчика или Process Monitor.
2. @HansPassant, я пробовал копировать библиотеки CRT (msvcr90.dll ) для разных конфигураций x86 из WinSxS path, а также из Visual Studio 2008 redistributables path, они продолжали выдавать мне ошибку, хотя он жаловался на то, что не использовал правильные ЭЛТ из папки WinSxS. Затем я вернулся к использованию ЭЛТ по умолчанию, которые он использовал, и ошибка исчезла. Затем я попробовал отладку с помощью Process Monitor, он смог успешно найти «Server.dll «. Однако во время отладки в Visual Studio он загрузил сервер. dll и немедленно выгружается, возможно, он не смог найти или правильно инициализировать что-то?