On 12/26/2012 2:12 PM, Andrej Mitrovic wrote:
All contents in the core.sys.windows.windows module in 2.061 are
marked as nothrow.

nothrow means exceptions derived from the Exception class are not
allowed to propagate. In other words now that the WNDPROC function
pointer is expected to be nothrow you have to wrap any statements
which might throw Exception objects in a try/catch block.

SEH[1] is implemented in D for x86 (x64 not yet, but maybe some day),
therefore exceptions can propagate, and they do as this sample will
show you if you compile it with 2.060:
https://github.com/AndrejMitrovic/dmd/blob/662db08ce9dd27d2c79d04ab4ccea9823f6142a1/test/win32/testthrow.d#L23

Are there problems with the SEH implementation which forces us to use
nothrow on win32? If there are then this should be documented.


The operating system calls WNDPROC directly. That means that you (the user) need to set up / tear down the D runtime yourself, much like what C main() does in druntime. Windows has no knowledge of D Exceptions, and it makes no sense to me to try to pass them on to Windows. WNDPROC should deal with them.

Reply via email to