понедельник, 21 декабря 2020 г.

Про частично определенные модули

 Не всегда к имени модуля бывает добавлен префикс - имя области действия этого модуля. Я стараюсь писать программы так, чтобы все модули всегда включали такой префикс. Но как быть со сторонними модулями?

Рассмотрим случай, когда требуется использовать библиотеку OExport в консольном проекте (Embarcadero RAD Studio 10.3.3). Для этого в тестовом примере консольного приложения я подключил модули OExport.pas и OExport_VCL.pas (также я добавил модуль MemTableEh.pas библиотеки EhLib).

Код тестового примера:

При компиляции получаю ошибку, связанную с неразрешенностью компилятором частично определенных имен модулей в OExport_VCL:
Компилятор не понимает к чему относится модуль Graphics - к Vcl.Graphics или FMX.Graphics (аналогичная ошибка, если закомментировать OExport_VCL в секции uses, будет с модулем Controls в модуле DBGridEh.pas).

Для того, чтоб решить эту проблему, мне пришлось вручную править файл .dproj.
Откроем файл в текстовом редакторе. В самом начале находим узел "FrameworkType".

Необходимо заменить значение с "None" на "VCL"
Чуть ниже найдем "PropertyGroup Condition="'$(Base)'!=''", а внутри него узел "DCC_Namespace"
Добавим в его значение следующие строчки: "Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples; Vcl.Shell"
Готово! Теперь при компиляции ошибок не будет.





1 комментарий:

  1. С похоже проблемой я столкнулся, когда захотел вызвать TFxrReport из консольного приложения. Добавление в uses модуля frxClass, приводит к ошибке компиляции "Unit "Graphics" not found". Проблема решается аналогичным образом

    ОтветитьУдалить