ctypes声明需要的参数,argtypes

可以指定dll导出的方法类型,你可以定义一个argtypes参数来指明。

对于可变参数,最好不要用这种,因为也不适合。

'''
c
int add(int a,int b)
{
    return a+b;
}
'''

add.argtypes = [c_int,c_int]
add('112','1113')

这里的add,就会严格的类型转换,所以这里字符串就是错的。

声明具体类型可以保护互不兼容的类型(c类型的标准),因为不知道类型,所以就需要通过转化变成对应类型。

比如 ("%p",a)  这样,a如果是一个整数,就知道了需要转化成为什么样的类型。

如果传入的参数是自定义类型,那么就需要实现一个类成员方法  from_param(cls,obj),这样就可以用在argtypes中了。

from_param接受一个Python对象,也就是传递给调用方法的参数。首先会有一个类型检测,确保这个类型可以接受。,然后返回对象本身(这个对象有_as_arameter属性)。无论你想要发送什么参数过去,返回的结果只能是int ,string,bytes等c类型。或者是一个拥有 _as_parameter_属性的对象。

返回类型

默认返回的是C类型的int。也可以通过设置restype属性来改变返回。

扫描二维码关注公众号,回复: 6044124 查看本文章

如果不想使用 ord来进行墙砖,可以设置argtypes属性,然后第二个参数就会被转化为c的char,当然必须是单字符。

在返回类型上,我们可以设置为可调用函数,接受返回值,根据返回值响应不同的结果,或者是一个类,接受相应值并构造。

异常捕获

WinError可以用来捕获windows上的错误,然后使用formatmessage api来获取对应错误代码的字符串。并且返回异常。

WinError接受一个可选参数错误代码,如果没有给定就通过  GetLastError来回溯查找最近一个发生的错误。

猜你喜欢

转载自blog.csdn.net/rubikchen/article/details/89431785