2012-06-30 2 views
0

Я разрабатываю 64-битное приложение в Delphi, и я разделил проект на две папки. Один для компонентов, которые я буду использовать для графического интерфейса, а другой для не визуальных объектов и основного программного проекта. Папки разделены, так как я хотел бы использовать некоторые компоненты в других проектах. Папка «Компоненты», очевидно, находится в пути к библиотеке.Delphi - доступ к свойствам из компонента во внешний блок

Теперь мне нужно разработать визуальный компонент, который должен прочитать некоторые свойства из блока (называемого теперь BaseUnit), который находится в главной папке. Но BaseUnit использует некоторый код в 64-битном asm, который невозможно использовать для Компонентов. Каков наилучший объектно-ориентированный подход, чтобы преодолеть эту проблему?

Я использую некоторые упрощенные версии объектов, которые должны быть прочитаны, чтобы компонент мог читать свойства из BaseUnit, которые мне нужны. Я уже это в прошлом, и это работает, но я не знаю, есть ли более праведный способ. Можно было бы создать базовый класс, совместимый как с компонентом, так и с главной программой, но я до сих пор не знаю, приложит ли польза усилия по реорганизации дизайна BaseUnit.

Я надеюсь, что я объяснил свою проблему в understandeable образом^_^ Спасибо заранее, Paolo

EDIT: Спасибо всем большое за ответы, компилятор IFDEF подход, по существу, самый простой способ, но ... Я думаю, что я ищу способ позволить моим компонентам существовать во время разработки, не зависимо от основного проекта. Это основной проект, который связывает их с невизуальной частью. Это потому, что я хотел бы создать графический интерфейс из проекта void и просто подключить свойства компонентов к объектам «движка», над которыми я работаю (я разрабатываю аудио-приложение).

Все эти предложения требуют, чтобы основная папка находилась на пути к проекту «Компоненты». Теперь я пытаюсь поместить фиктивные элементы в папку «Компоненты», которые являются копиями BaseUnit, с теми свойствами, которые мне нужно читать. Таким образом, я могу связать во время выполнения компоненты с реальным BaseUnit.

+1

Что вы имеете в виду: «Но BaseUnit использует код в 64-битном ассемблере, что это impossibile для компонентов, чтобы использовать» ? Какую ошибку вы получили? – Marcodor

+1

Что означает Paolo, так это то, что IDE 32 бит, а пакет времени разработки не может иметь 64-битный ASM. –

+1

Я удалил свой ответ, потому что теперь я понятия не имею, о чем ваш вопрос. –

ответ

2

Сделать хорошее использование файлов включают:

procedure BaseUnitProcThatUsesASM; assembler; 
asm 
    {$I asmcode.inc} 
end; 

Вы можете поместить asmcode.inc в папку, специфичные для платформы (скажем, i386 и x86_64) и использовать компилятор макрос для включать путь. Я не использую Delphi на самом деле, но я полагаю, что у Delphi есть такая вещь, как в Free Pascal. Если нет, вы можете создать 2 файла проекта для каждой платформы, каждая из которых содержит путь к конкретной папке.

Не рефакторинга, что не должно быть переработан;)

+2

Бесплатно Pascal do handle включает файлы хорошо. Но delphi не ... –

+1

Да, это просто не будет работать в Delphi. Вам понадобится IFDEF. Но это не похоже на 32-битную версию или даже должно быть. –

Смежные вопросы