Вводные.

Embarcadero C++ Builder XE4 (но встречалось неоднократно и в других версиях билдера)

Ситуация (довольно таки распространенная) следующая:

  1. Есть проект exe, использующий сторонние компоненты
  2. Сторонние компоненты периодически обновляются
  3. После очередного обновления компонентов запускаем (почищенный, нормально скомпилированный) проект, получаем - AV где-то в недрах, на этапе создания формы, использующей сторонние компоненты.

Решение - см. далее...

 

Решение:

Из подручных средств понадобится Notepad++ с установленным плагином сравнения.

  1. Открываем опции проекта, Packages. Для текущей ветки платформы, откуда "растут" Debug и Release. Например, для ветки Win32.
  2. Копируем весь список пакетов из текстового поля, сохраняем как текст.
  3. Заводим новый пустой exe проект, таким же образом берем из него список пакетов, копируем в нотепад, сохраняем как текст.
  4. Открываем оба сохраненных файла в паде, заменяем в обоих ";" на перенос строки (\n, там есть возможность расширенной замены с использованием эскейпов). Это нужно для наглядности, иначе список пакетов идет одной строкой, и неясно, что там поменялось, и в чем разница.
  5. Сравниваем контент.

 

В моем случае файлы сторонних пакетов после обновления шли с другими именами, все компилировалось, но загрузчик ресурсов не мог создать класс компонента на рантайме, т.к. в списке пакетов exe, получается, отсутствовали новые имена пакетов. На дезайн тайме, все компоненты загружались средой, и все было с виду нормально.

 

"Лечение" состоит в копировании строки со списком пакетов из "свежего" проекта exe, в наш рабочий проект.