Включение клиентских файлов для общего файла - PullRequest
0 голосов
/ 15 сентября 2010

Хорошо, у меня есть 2 проекта для игры. Один - сервер, а другой - клиент. Я храню общие блоки в общей папке, которую я использую для включения в мой проект клиент / сервер. Однако есть проблема: у меня есть общий файл, которому нужен другой файл для клиента / сервера. Пример: mySharedLib необходимо печатать на консоль, однако консоль клиент / сервер отличается. Какие у меня варианты? Спасибо

Ответы [ 2 ]

4 голосов
/ 15 сентября 2010

В вашем общем файле вы можете использовать define директиву компилятора

Например

{$IFDEF MYSERVER}
    Writeln('Server');  // this code executes
{$ELSE}
    Writeln('Client');  // this code does not execute
{$ENDIF}

Затем в вашем серверном проекте определите определение MYSERVER и в вашем клиенте определитеMYCLIENT, затем, когда разделяемый код разделяется, используйте оператор {$ IFDEF).

Из справки Delphi по условным определениям:

Условные директивы$ IFDEF, $ IFNDEF, $ IF, $ ELSEIF, $ ELSE, $ ENDIF и $ IFEND позволяют компилировать или подавлять код на основе состояния условного символа.$ IF и $ ELSEIF позволяют основывать условную компиляцию на объявленных идентификаторах Delphi.$ IFOPT компилирует или подавляет код в зависимости от того, включен ли указанный переключатель компилятора.

Однако это не будет работать, если общий код находится в DLL или любом другом совместимом совместном ресурсе, таком как пакет,

Из справки Delphi об условных определениях:

Условные определения оцениваются только при перекомпиляции исходного кода.Если вы измените статус условного символа, а затем перестроите проект, исходный код в неизмененных единицах может не перекомпилироваться.Используйте Project | Build All Projects, чтобы все в вашем проекте отражало текущий статус условных символов.

1 голос
/ 15 сентября 2010

Если они разные, они больше не являются общим файлом.

...