У меня есть общий модуль, который делает некоторые записи в GExperts Debugger и / или OutputDebugString. Я собираюсь использовать его в консольном приложении, поэтому я хочу, чтобы он мог выводить на стандартный вывод через writeln()
.
Основной исполняемый файл уже имеет {$ APPTYPE CONSOLE}, но я не думаю, что это поможет мне здесь. Процедура регистрации будет вызываться из нескольких мест:
- главное консольное приложение, которое будет ссылаться на BPL,
- с другого BPL, который «требует» первого bpl, и .....
- из DLL, которая статически связывает устройство.
BPL и DLL будут создаваться без видимости директивы {$ APPTYPE CONSOLE}, поэтому я не могу использовать условную компиляцию IFDEF. BPL и DLL должны иметь возможность работать в любом случае, в зависимости от того, является ли основное приложение обычным winapp или консольным приложением.
Одно неприятное решение, которое пришло мне в голову, - это использовать имя исполняемого файла. например:
if (UpperCase(ExtractFileName(ParamStr(0))) = 'MYCONSOLEAPP.EXE') then ...
Но я ненавижу это делать, поскольку у меня могут быть другие консольные приложения ...
Я бы предпочел просто использовать магическую функцию AmIAConsoleApp: boolean;
Есть что-нибудь подобное?
Я использую Delphi2005 в этом проекте.
Обновление: я вижу, что я вроде как дубликат этого вопроса , но я бы хотел опросить людей из Delphi, чтобы выяснить, есть ли лучший подход.