Exception safety

BCS ao at pathlink.com
Fri Dec 12 09:03:39 PST 2008


Reply to Sergey,

> What happens if an extern(Windows) function throws?
> 
> Basically I want my export DLL interface functions to fail gracefully.
> What happens if I don't catch?  Currently my typical export looks like
> this, and it looks a bit verbose:
> 
> extern(Windows) export HRESULT DllRegisterServer()
> {
> try
> {
> doStuff();
> }
> catch(Exception e)
> {
> myTrace("Shit happens. Reason: " ~ e.msg);
> return E_UNEXPECTED;
> }
> catch(Object obj)
> {
> myTrace("Shit happens. Reason: " ~ obj.toString());
> return E_UNEXPECTED;
> }
> catch
> {
> myTrace("Shit happens. Reason: unknown");
> return E_UNEXPECTED;
> }
> return S_OK;
> }

you can burry two of those in a function and get

> extern(Windows) export HRESULT DllRegisterServer()
> {
> try
> {
> doStuff();
> }
> catch(Exception e) { return OhCrud(e); }
> catch{ return OhCrud(); }
> return S_OK;
> }





More information about the Digitalmars-d mailing list