Excepción de captura de tipos

Estoy jugando un poco con ctypes y C / C ++ DLL Tengo una dll de “matemáticas” bastante simple

double Divide(double a, double b) { if (b == 0) { throw new invalid_argument("b cannot be zero!"); } return a / b; } 

Hasta ahora, el único problema que funciona es que obtengo una excepción de error de Windows en Python y no puedo recuperar el texto. B no puede ser cero. ¿Debo lanzar algún tipo de excepción especial? ¿O debe alterarse el código de Python? código python:

 from ctypes import * mathdll=cdll.MathFuncsDll divide = mathdll.Divide divide.restype = c_double divide.argtypes = [c_double, c_double] try: print divide (10,0) except WindowsError: print "lalal" except: print "dada" 

En primer lugar, no debe utilizar especificaciones de excepción en C ++. Esta es una característica horrible de C ++ y ha quedado en desuso en el último estándar. Además, el throw(...) syntax throw(...) no es válido para C ++, esta línea no se comstack con un comstackdor estándar como gcc:

 double Divide(double a, double b) throw (...) 

Creo que estás confiando en una “extensión” de Visual C ++ no estándar, que es, de todos modos, inútil de todos modos, porque Visual C ++ ignora todas las especificaciones de excepción a menos que throw() no tenga argumentos.

Revisando la documentación de ctypes para Python 2.7.3 No puedo ver ninguna referencia a C ++ y lanzar excepciones desde el código de C ++ llamado a través de ctypes. Parece que ctypes fue diseñado solo para llamar a funciones C y no maneja las excepciones de C ++.

Prueba esto:

 from ctypes import * mathdll=cdll.MathFuncsDll divide = mathdll.Divide divide.restype = c_double divide.argtypes = [c_double, c_double] try: print divide (10,0) except WindowsError as we: print we.args[0] except: print "Unhandled Exception"