Вводные.
Embarcadero C++ Builder XE4 (но встречалось неоднократно и в других версиях билдера)
Ситуация (довольно таки распространенная) следующая:
- Есть проект exe, использующий сторонние компоненты
- Сторонние компоненты периодически обновляются
- После очередного обновления компонентов запускаем (почищенный, нормально скомпилированный) проект, получаем - AV где-то в недрах, на этапе создания формы, использующей сторонние компоненты.
Решение - см. далее...
Решение:
Из подручных средств понадобится Notepad++ с установленным плагином сравнения.
- Открываем опции проекта, Packages. Для текущей ветки платформы, откуда "растут" Debug и Release. Например, для ветки Win32.
- Копируем весь список пакетов из текстового поля, сохраняем как текст.
- Заводим новый пустой exe проект, таким же образом берем из него список пакетов, копируем в нотепад, сохраняем как текст.
- Открываем оба сохраненных файла в паде, заменяем в обоих ";" на перенос строки (\n, там есть возможность расширенной замены с использованием эскейпов). Это нужно для наглядности, иначе список пакетов идет одной строкой, и неясно, что там поменялось, и в чем разница.
- Сравниваем контент.
В моем случае файлы сторонних пакетов после обновления шли с другими именами, все компилировалось, но загрузчик ресурсов не мог создать класс компонента на рантайме, т.к. в списке пакетов exe, получается, отсутствовали новые имена пакетов. На дезайн тайме, все компоненты загружались средой, и все было с виду нормально.
"Лечение" состоит в копировании строки со списком пакетов из "свежего" проекта exe, в наш рабочий проект.