On 4/14/2012 4:41 PM, Manu wrote:
On 14 April 2012 22:51, Walter Bright <newshou...@digitalmars.com
<mailto:newshou...@digitalmars.com>> wrote:

    On 4/14/2012 3:49 AM, Manu wrote:

        I have a D DLL, loaded into a C app, if D throws, C doesn't seem to be
        able to
        catch it and it just crashes without any useful messages. Maybe I'm
        doing it wrong?


    C has no exception handlers in it. C knows nothing about exceptions.

    I recommend that all your APIs in a D DLL be wrapped in something that
    catches all exceptions, and then does something recognizable to the calling
    C code.


I mean to say C++, are the exceptions compatible?

No. For one thing, C++ can throw any type (like an int). That isn't even expressible in D.


I don't think it's feasible
for me to wrap the top level of every function implemented in D in a try/catch
statement. I suppose I'll just have to make use of a 'weak assert' in our code,
where it may be possible to continue. I suppose library asserts will make the
assumption they can absolutely not continue, so as long as I can hook a message
first, the proceeding crash is fine.

Anything you want to recover from, wrap in a try/catch. For ones you don't want to recover from, just do the log/notification and exit.

Reply via email to