大虾们, 我现在需要由外部应用程序来调用一个delphi编写的exe程序, 希望等待该exe返回一个0/1,请教各位这个怎么编写?C有个exit函数,可以带返回码, Delphi的有没有?

解决方案 »

  1.   

    Delphi的处理方式与C/C++有些不同,Delphi中对针对main或是WinMain函数的参数以及返回值的处理是通过system.pas中一些相应的变量及函数实现的。其中程序的返回值定义在System.pas中的ExitCode.
    所以,要想让程序返回值为1,则只需在程序中设置ExitCode := 1;即可。如下测试代码:program Project2;{$APPTYPE CONSOLE}uses
      SysUtils;begin
      { TODO -oUser -cConsole Main : Insert code here }  ExitCode :=10 ;
    end.------
    对返回值的测试:test.bat@echo off
    rem test1.exe 为使用c++写的程序,返回值为33
    test1.exe
    echo test1.exe return %errorlevel%
    rem project2.exe为上边的代码实现的结果
    project2.exeecho project2.exe return %errorlevel%@echo on---------------
    执行结果:
    test1.exe return 33
    project2.exe return 10说明:
    本人以前也没有研究这个,但是在看到楼主的问题后感觉Delphi应该是可以解决的。于是通过使用debug工具跟踪,如下:00403595   |.  FF15 24904000   |call dword ptr ds:[409024]
    0040359B   |>  8B06            |mov eax,dword ptr ds:[esi]
    0040359D   |.  50              |push eax                                ; /ExitCode
    0040359E   |.  E8 EDDAFFFF     |call <jmp.&kernel32.ExitProcess>        ; \ExitProcess
    所以Delphi的程序是有一个全局变量的:ds[esi]
    其实这个变量就是ExitCode.请参考!