Any way to catch runtime errors in a DLL?

Simon Marlow simonmarhaskell at gmail.com
Wed Jun 14 06:19:02 EDT 2006


Michael Marte wrote:

> if a runtime error occurs inside a DLL compiled by ghc (like 
> "irrefutable pattern match failed" or exceptions caused by error),
> the application that called the DLL function dies. This is ok for 
> development but unacceptable when it happens with a user sitting in 
> front of the display. (It has not yet happened but it's only a question 
> of time.)
> 
> So my question is: Is there any way to catch and process runtime errors? 
> I am looking for some way to map those errors to exceptions on the C++ 
> side that can be caught if required. It would be ok to kill the Haskell 
> runtime system and unload the DLL if necessary.

The FFI doesn't provide any way to propagate exceptions from Haskell to 
the caller of a foreign export, because there's no standard way to do 
this.  It is your responsibility to catch the exception in Haskell and 
return an appropriate error code to the caller.  To raise a C++ 
exception, you would probably need another C++ wrapper around each 
foreign export, translating an error code into the C++ exception.

Cheers,
	Simon



More information about the Glasgow-haskell-users mailing list