我在玩ctype和C/C++ dll,我有一个非常简单的“数学”dll
double Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}到目前为止,唯一的问题是,我得到了一个WindowsError异常,我无法检索文本b,不能为零,我必须抛出一些特殊的异常类型吗?还是必须修改Python代码?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"发布于 2012-04-16 16:49:10
首先,您不应该在C++中使用异常规范。这是C++的一个可怕的特性,在最新的标准中已经被废弃了。此外,语法throw(...)根本不是有效的C++,这一行不使用像gcc这样的符合标准的编译器编译:
double Divide(double a, double b) throw (...)我认为您依赖的是一个非标准的VisualC++“扩展”,据我所知,这是无用的,因为VisualC++忽略所有异常规范,除非throw()没有参数。
通过查看Python2.7.3的ctypes文档,我看不到对C++的任何引用,并抛出通过ctype调用的C++代码的异常。看来ctype只用于调用C函数,而不处理C++异常。
发布于 2012-04-16 14:15:47
试试这个:
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"https://stackoverflow.com/questions/10175753
复制相似问题