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.