DLL больше не загружается, если встроена в Visual Studio 6 - PullRequest
1 голос
/ 31 января 2011

Я работаю над приложением Visual Studio 2005 C ++ .NET.Для работы в сети он использует DLL протокола сетевого протокола, встроенную в Visual Studio 6. (Разработчик DLL клянется старым инструментом.)

В какой-то момент проект Visual Studio 6 был обновлен до 2005 года другим разработчиком.DLL была восстановлена, но это не сработало.В любом случае, они решили вернуться к 6. Я не осознавал этого, поэтому я загрузил 2005 .vcproj и собрал его.Я не уверен, что это был триггер, но я подозреваю, что так.

Теперь я не могу загрузить DLL на мою машину, если она была встроена 6. Windows работает так, как если бы файл .dll несуществовать.Если я использую продукт сборки Visual Studio 2005, он загружается правильно и работает, но некоторые функции нарушены.Решение будет заключаться в обновлении и отладке с 2005 года, но другой разработчик хочет продолжить работу с VS 6. Однако он работает на других компьютерах.Все работают под управлением XP Professional SP3.

Если я скопирую каталог программы из рабочей установки в мою, .exe и .dll и все, она перестает работать.Что может быть причиной этого?

Я использовал бесплатную программу ProcessExplorer и убедился, что никакие другие подобные DLL не загружены, и никакие DLL не загружены на компьютере работающей установки, прежде чем я ожидаю, что это будет.

1 Ответ

3 голосов
/ 01 февраля 2011

Основная причина проблем такого типа заключается в том, что вы смешиваете разные библиотеки времени выполнения: dll VS6 использует msvcr60.dll, а dll VS2005 использует msvcr70.dll (то есть, если кто-то не сказал VS2005 для компиляции с платформой VS6, ноэто маловероятно).Типичный пример проблемы: приложение выделяет через msvcr70, передает этот кусок памяти в dll, которая освобождает с помощью msvcr60, но тот использует другую кучу.Bang.

Реальное решение здесь состоит в том, чтобы заставить все (app и dll) использовать одну и ту же среду выполнения или, другими словами: обновить ее до последней версии VisualStudio. Это не сработало - это просто знак того, что код написан довольно плохо или использует устаревшие функции;в обоих случаях здоровым решением будет рефакторинг, а не возиться с почти древним компилятором.Предположим, что другой разработчик настаивает на использовании VS6, что произойдет в течение 5/10/15 лет?Есть ли у него действительно веские причины придерживаться VS6?

...