Как определить, работаю ли я как консольное приложение? (Delphi на Win32)

У меня есть общий модуль, который выполняет некоторые записи в GExperts Debugger и / или OutputDebugString. Я собираюсь использовать его в консольном приложении, поэтому хочу, чтобы он мог выводить на стандартный вывод через Writeln () .
В основном исполняемом файле уже есть {$ APPTYPE CONSOLE}, но я не думаю, что мне это поможет. Процедура регистрации будет вызываться из нескольких мест:

  1. главное консольное приложение, которое будет связываться с BPL,
  2. из другого BPL, который «требует» первого bpl, и .....
  3. из DLL, которая статически связывает модуль.

BPL и DLL будут построены без видимости для директивы {$ APPTYPE CONSOLE}, поэтому я не могу использовать условную компиляцию IFDEF. BPL и DLL должны иметь возможность работать в любом направлении, в зависимости от того, является ли основное приложение обычным winapp или консольным приложением.

Мне пришло в голову одно неприятное решение - использовать имя исполняемого файла. пример:

if (UpperCase(ExtractFileName(ParamStr(0))) = 'MYCONSOLEAPP.EXE')  then ...

Но я ненавижу это делать, так как у меня могут быть другие консольные приложения ...

Я бы предпочел просто волшебную функцию AmIAConsoleApp: boolean; Есть что-нибудь подобное? В этом проекте я использую Delphi2005.

Обновление: я вижу, что я в некотором роде дубликат этого вопроса , но я хотел бы опросить сотрудников Delphi, чтобы узнать, есть ли лучший подход.

9
задан Community 23 May 2017 в 11:55
поделиться