2015-09-13 12 views
0

Я использую пакет DragDrop от Anders Melander.
Он отлично работает в режиме Win32, но требует регулировки для 64 бит.
Я делаю это, добавляя {$IFNDEF CPUX64}, чтобы прокомментировать ссылки на designIDE.Могу ли я сделать условие `require` в пакете условным?

Однако при изменении источника пакетов из

requires 
    rtl, 
    DesignIDE; 

в

requires 
    rtl 
    {$IFNDEF CPUX64} ,DesignIDE{$ENDIF}; 

Компилятор просто выбрасывает DesignIDE линию источника пакета, оставив только:

requires 
    rtl; 

Что отлично подходит для X64, но ломается, как только я перестроен для 32-битного.

Есть ли способ иметь один пакет, включая элементы времени разработки для win32 с конфликтующими элементами IFDEF'ed для X64? Или я вынужден создать отдельный пакет Runtime для X64?

+3

Правила понятны. Пакеты времени разработки отделены от пакетов времени исполнения. –

+1

Старый трюк - отредактируйте свой пакет за пределами IDE, а когда впоследствии IDE попросит сохранить пакет, всегда говорите «Нет». – kludg

+2

Если код Андерса требует пакета 'DesignIDE' в ** пакете ** ** (и я был бы очень удивлен, если он это сделал), то его код не будет должным образом разделен. «DesignIDE» можно использовать только в пакете «** designtime only **». Он не может использоваться в пакете ** ** только при запуске ** или в смешанном пакете «** designtime и runtime **». Код времени разработки не разрешен во время выполнения пакетов. –

ответ

3

Нет, вы не можете использовать условные обозначения в любом файле проекта. IDE владеет и контролирует его и может отбрасывать (и даже уничтожать) любую настройку, которую вы выполняете с условными обозначениями. Вам понадобится создать второй пакет для этого, что является обычной практикой для использования DesignIDE в любом случае. Даже если это не поддержка 64-битной версии, вам не разрешено развертывать DesignIDE с любым приложением. Это единственная цель интеграции с IDE, которая по юридическим причинам должна находиться только в пакете Design-Time.

Имейте в виду, что пакет Design-Time должен быть только be Win32, так как IDE Delphi составляет всего 32 бит. Тогда пакет Run-Time может быть любой поддерживаемой платформой, какой вы хотите (например, Win64), конечно, если она поддерживается любой инфраструктурой, которую она может использовать.

+0

Это настоящий облом. – Johan

+0

@JerryDodge: На самом деле * любой основной файл проекта * является слишком общим. Например. программа IfDefs; использует SysUtils {$ define Test} {$ ifndef Test} Blam! {$ ENDIF}; начинаем конец. «any * package * ...» может быть ... – MartynA

+0

@MartynA У меня были проблемы с основными файлами EXE, которые заставили меня перенести инициализацию приложения на отдельный блок, обычно называемый «AppInit.pas» и из проекта Основной файл Я вызываю процедуру, называемую обычно «RunApp». –