在windows平台上,python可以使用ctypes模块调用dll文件中的库函数。
dll中的函数约定调用不同,所以python中导入dll库文件的形式也不同。
例如,如果一个dll文件"mydll.dll"是以c调用(cdecl)的调用的,python中加载dll文件的代码如下:
从ctypes导入*
dllcdll(mydll.dll)
如果dll函数的调用约定是标准调用约定(stdcall),则dll文件的加载代码改为:
dllwindll(mydll.dll)
调用dll中的函数时,必须正确设置函数中的传递参数类型。转移值的类型比较简单,所以我赢了这里就不提了。下面是传输结构参数类型的一个例子。
这个例子的功能是打印一个学生的信息并返回一个指向字符串的指针。其中,学生信息被定义为一种结构类型,包括学生的姓名、年龄和分数信息。该函数的语句和结构定义如下图所示:
函数printstudentinfo的具体c语言实现代码如下:
因此,在python中,调用方法如下:
运行结果如下图所示:
总结:对于结构参数的传递,需要在python中使用structure作为基类定义一个对应的结构类student,并在类的_fields中定义结构体中每个成员变量的名称和数据类型。然后定义一个structur
1.全局变量和局部变量
全局变量:指在函数外定义的变量,一般不缩进,在程序执行的全过程中有效。
局部变量:指函数内部使用的变量,只在函数内部有效,函数退出时不会存在。
函数根据以下原则作用于变量:
(1)简单数据类型变量仅在函数内部创建和使用,不管它们是否与全局变量同名。函数退出后,变量被释放。如果有同名的全局变量,它们的值保持不变。
(2)简单数据类型变量在用全局保留字声明后,用作全局变量。函数退出后,变量仍然存在,其值由函数更改。
(3)对于组合数据类型的全局变量,如果函数内部没有真正创建的同名变量,可以直接在函数内部使用和修改全局变量的值。
(4)如果功能部分真正创建了一个组合数据类型变量。无论是否存在同名的全局变量,函数只对局部变量进行操作,函数退出后局部变量被释放,全局变量的值保持不变。