Использование условных выражений в основном блоке проекта - IDE уничтожает код - PullRequest
3 голосов
/ 17 февраля 2012

Я создаю приложение службы Windows, которое имеет конфигурацию для компиляции его в качестве основного приложения Windows.Основной файл проекта для exe включает в себя условия, которые определяют, компилируется ли проект как приложение-служба или как приложение Windows Forms.

Проблема в том, что когда я делаю что-то, что вызывает изменение кода проекта,код разрушается и нарушается.Например, строка с надписью Application.Initialize; становится AppliApplication.Initialize;, а строка с {$R *.RES} обрезается до S}, и большинство моих условных выражений удаляются.

Мне интересно, есть лиэто способ преодолеть эту проблему, если есть какие-то уловки, или если мне просто нужно улыбаться и терпеть это?

Вот файл ниже, как я хотел бы, чтобы он остался ...

program JDRMServer;

uses
{$IFDEF TESTAPP}
  FastMM4,
  Vcl.Forms,
{$ELSE}
  Vcl.SvcMgr,
{$ENDIF TESTAPP}
  uJDRMServer in 'uJDRMServer.pas' {JDRMSvr: TService},
  uJDRMSessions in 'uJDRMSessions.pas',
  uJDRMSvrCli in 'uJDRMSvrCli.pas',
  uJDRMSvrDsh in 'uJDRMSvrDsh.pas',
  JDDB in 'JDDB.pas',
  uJDRMServerTEST in 'uJDRMServerTEST.pas' {JDRMSvrTest},
  uJDRMServerThread in 'uJDRMServerThread.pas',
  uJDRMSvrMessages in 'uJDRMSvrMessages.pas';

{$R *.RES}

begin

{$IFDEF TESTAPP}
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TJDRMSvrTest, JDRMSvrTest);
{$ELSE}
  if (not Application.DelayInitialize) or (Application.Installing) then
    Application.Initialize;
  Application.CreateForm(TJDRMSvr, JDRMSvr);
{$ENDIF TESTAPP}
  Application.Run;
end.

Ответы [ 3 ]

5 голосов
/ 17 февраля 2012

Как говорит Дэвид, вы застряли в IDE, полагая, что dpr - это его собственный частный задний двор. Самое простое решение - просто собрать все в отдельном блоке и удалить условные выражения из условия использования dpr. FastMM пригодится в вашей версии сервиса и в любом тестовом приложении, и в этом отдельном модуле можно различить vcl.forms и vcl.svcMgr.

дпр будет уменьшено до:

uses
  FastMM4,
  YourAppMain,
  uJDRMServer,
  uJDRMSessions,
  uJDRMSvrCli in 'uJDRMSvrCli.pas',
  uJDRMSvrDsh in 'uJDRMSvrDsh.pas',
  JDDB in 'JDDB.pas',
  uJDRMServerTEST in 'uJDRMServerTEST.pas' {JDRMSvrTest},
  uJDRMServerThread in 'uJDRMServerThread.pas',
  uJDRMSvrMessages in 'uJDRMSvrMessages.pas';

{$R *.RES}

begin
  YourAppMain.Execute;
end;

А ваш основной модуль приложения будет брать остальную часть кода из dpr:

unit YourAppMain;

interface

procedure Execute;

implementation

uses
{$IFDEF TESTAPP}
  Vcl.Forms,
{$ELSE}
  Vcl.SvcMgr,
{$ENDIF TESTAPP}
  OtherUnits;

procedure Execute;
begin
{$IFDEF TESTAPP}
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TJDRMSvrTest, JDRMSvrTest);
{$ELSE}
  if (not Application.DelayInitialize) or (Application.Installing) then
    Application.Initialize;
  Application.CreateForm(TJDRMSvr, JDRMSvr);
{$ENDIF TESTAPP}
  Application.Run;
end;

end.
3 голосов
/ 18 февраля 2012

Простой ответ - просто создать другой проект и использовать его в качестве автономной версии.Это то, что я делаю со своими услугами, и это означает, что вы можете использовать другие условия для каждого режима.

2 голосов
/ 17 февраля 2012

Да, IDE делает это и всегда делает.Нет никакого известного способа остановить это, ведя себя так.Вам просто придётся смириться с этим.

У меня есть похожие условия, и способ, которым я с ними справляюсь, - это использовать мою систему контроля версий, чтобы помочь мне, во время фиксации, отменить изменения, которые вносит среда,Поэтому всякий раз, когда я проверяю файл .dpr, я проверяю различия и возвращаю поддельные.

Я также пытаюсь добавлять и удалять модули из проекта, редактируя файл .dpr, а не позволяя IDE делать это.Это имеет тенденцию уменьшать частоту фальшивых модов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...