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