[Openmcl-devel] win32 exception compatibility

Matthew Claus matt at mclaus.com
Mon Jun 1 20:07:17 UTC 2009


Hi all, let me first say thank you to everyone who has helped produce 
and make available such an outstanding tool. I'm having a lot of fun 
with it.

I am a complete novice with Clozure CL, so please take this question in 
that context. I'm running on 32 bit Windows XP SP2, using both the 
release and trunk version from subversion.

Is CCL fundamentally compatible with foreign C++ code (built with 
Microsoft Visual C++) that may internally use C++ exceptions?

I am calling a function in a foreign library and ending up at the lisp 
kernel debugger. I believe this is because the Microsoft compiler 
implements C++ exceptions with windows structured exceptions and as 
such, any throw in foreign code results in the CCL vectored 
exception handler being called. In this case, the debugger is 
entered on x86-exceptions.c, line 1992.

I found this article on MSDN (http://support.microsoft.com/kb/185294) 
which identifies the exception code used by the VC compiler in implementing C++ 
exceptions. I patched windows_arbstack_exception_handler like this:  

   if ((current_sp >= cs->low) && 
       (current_sp < cs->high)) { 
     debug_show_registers(context, exception_pointers->ExceptionRecord, 0); 

-->  if(code == 0xE06D7363){ 
-->    return EXCEPTION_CONTINUE_SEARCH;
--> } 
     FBug(context, "Exception on foreign stack\n"); 
     return EXCEPTION_CONTINUE_EXECUTION;
   }

Now my application is working fine but I'm wondering if I'm simply 
doing something wrong in the first place, if there is a better 
approach to solving this problem, or if calling foreign C++ code that 
is internally using exceptions is not intended to work at this time.

Thanks very much for your thoughts and assistance,

Matt





More information about the Openmcl-devel mailing list