我有一个常见的单元,会将一些日志记录到 GExperts 调试器和/或 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社区,看是否有更好的方法。