On 15 Jun 2009, at 07:45, leledumbo wrote:

Suppose I have a program written in C:

#include <stdio.h>

int main() {
 return 1 / 0;
}

and a Pascal program that calls it:

program prog;

{$mode objfpc}{$H+}

uses
 SysUtils;

begin
 try
   ExecuteProcess('tes.exe','');
 except
   on e: Exception do begin
     WriteLn(e.Message);
   end;
 end;
 WriteLn('Done').
end.

How can I catch the exception generated by the C program

You cannot. Exceptions are program-local events. They do not propagate outside the process they are raised in (regardless of whether they are transformed into language-level exception objects or not).

(note that it can be a DLL too)?

Executed via ExecuteProcess? If you mean calling a function in a dll, then it depends at least on the following: 1) if the dll function catches the exception itself, you won't see it (although if it's an FPC-compiled dll, then the exception will currently always propagate to the main program under Windows: http://bugs.freepascal.org/view.php?id=12974) , even if it reraises it afterwards (because then it will have been transformed from an OS-level exception into a language-level exception, and a) FPC's exception model is different from that of all other compilers, and b) even if the dll is compiled with FPC and if you would be able to catch the exception in the dll, FPC's implementation currently does not allow propagating language-level exceptions across dll/program (nor dll/dll) boundaries
b) if the dll function does not catch the exception
2) if the dll/dll function does not catch the system-level exception, you should be able to catch it in the FPC function that called that function.

The above approach doesn't catch it. The C program terminates abnormally as usual, and the Pascal program goes by itself (proven by string 'Done' gets
written correctly).

Most program exit with a non-zero exit code if some error occurred. You have to use that, or some other form of explicit communication (e.g., have the child process write something to a file, use some form of shared memory in the parent and the child, ...).


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to