Sergey Gromov wrote:
What happens if an extern(Windows) function throws?

Very, very bad things.

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:

Yup. It's pretty awful, and you need to remember to do it every time.
I do something like:

void doDllRegisterServer()
{
     doStuff();
}

extern(Windows) export HRESULT DllRegisterServer()
{
   mixin(SafeInvoke("doDllRegisterServer()"));
}

where SafeInvoke creates a string mixin which adds all the catch wrappers.




>

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;
}

Reply via email to