В конце второй части этого урока мы столкнулись с небольшой проблемой, но, если честно, это на самом деле большая проблема. Если у нас есть время, этот вопрос должен стоить наших усилий по изучению.
Помните, как мы столкнулись с этой проблемой? Тогда мы сначала скомпилировали ActiveXDLL, а затем скомпилировали тестовую программу, использующую эту DLL. Далее мы перекомпилируем DLL, предполагая, что содержимое DLL необходимо изменить. Однако, когда я снова запускаю тестовую программу, возникает ошибка!
Да, такого точно не может быть.
Потому что опыт подсказывает нам, что это проблема совместимости. Итак, с этим можно справиться следующим образом:
Запустите Visual Basic и откройте проект Northwind;
Выберите меню «PROject» -> «NorthwindProperties»;
Откройте вкладку «Компонент»;
Просматривая содержимое страницы «Совместимость версий», вы можете найти три варианта. Позвольте мне объяснить сейчас:
NoCompatibility — каждый раз при компиляции пользовательский COM-компонент помечается новым тегом, что означает, что программа может использовать только старый тег (предыдущую версию) DLL.
ProjectCompatibility — пользовательские COM-компоненты не всегда помечаются новым тегом при каждой компиляции. Если это так, любые используемые в данный момент приложения не будут работать. На самом деле это произойдет только в том случае, если текущий проект существенно отличается от скомпилированного проекта DLL.
Двоичная совместимость. При каждой компиляции приложение всегда пытается сохранить ранее скомпилированный тег DLL, гарантируя тем самым, что используемое приложение не будет иметь синий экран смерти. Однако, если текущая скомпилируемая DLL слишком отличается от ранее скомпилированной DLL, будет отмечен новый тег.
Давайте проверим приведенный выше аргумент:
Откройте тестовую программу из предыдущей части этого руководства;
Перекомпилируйте его;
Проверьте его, и он должен работать нормально;
Откройте проект ActiveXDLL;
Установите для его свойства значение BinaryCompatibility;
Перекомпилируйте DLL;
Попробуйте тестовую программу, и она должна работать нормально.
Хорошо, похоже, проблема решена. Но когда DLL перекомпилируется, большинство разработчиков попадут в другую ситуацию несовместимости.
Нет ли лучшего решения? Давайте пока отложим этот вопрос!
Вы можете посетить следующие сайты для получения дополнительной информации:
www.PylonOfTheMonth.co.uk.->