从GUI应用程序

时间:2017-10-03 14:38:21

标签: windows delphi winapi delphi-10.2-tokyo

我正在用Delphi 10.2(win32 target)编写的一套应用程序编写一个小型集成测试框架。

我的想法是检测一个特定的command-lien参数,如果它存在,则运行测试,将结果打印到STDOUT和控制台,然后以0(无错误)或1(错误)退出,以便构建脚本可以获取结果。

除了最后一部分之外,它运作良好:我无法正确设置进程退出代码并从调用脚本中读回。我总是得到值-1073741515。

由于该程序理论上是一个GUI应用程序,我编写了一些代码,允许它附加到调用控制台(或者如果不存在则创建一个),也许我的问题来自于它。

这是我的代码:

  UIAbstraction.writeln('Integration testing of '+ModuleName, dmEmphasis);
  if Errors.Count > 0 then
  begin
    UIAbstraction.writeln('Erros occured during integration tests:');
    Errors.ForEach(procedure (const Aline: string)
      begin
        UIAbstraction.writeln(ALine, dmError);
      end
    );
    UIAbstraction.Detach;
    ExitProcess(cardinal(1));
  end
  else
  begin
    UIAbstraction.writeln('Integration tests sucessfull', dmSuccess);
    UIAbstraction.Detach;
    ExitProcess(cardinal(0));
  end;

UIAbstraction是一个很小的类,它很好地抽象了UI(目标是以后能够轻松地注入不同的实现,可以与不同的集成测试系统集成)。它主要有两个有意义的方法:附加和分离:

procedure TConsoleConnector.Attach;
begin
  IsAttached:=AttachConsole(-1);
  if not IsAttached then
    IsAttached := GetlastError = 5; // 5 = ACCESS_DENIED = already attached
  if not IsAttached
  then
  begin
    IsAttached:=AllocConsole;
    if not IsAttached then
      RaiseLastOSError;
  end;
end;


procedure TConsoleConnector.Detach;
begin
  if IsAttached then
    FreeConsole;
  IsAttached:=false;
end;

不幸的是,当我从命令行运行此代码并使用echo %errorlevel%跟随它时,我总是得到-1073741515而不是预期的0或1。

0 个答案:

没有答案