(续) python 中 ctypes 的使用尝试

内容接前文:

https://www.cnblogs.com/devilmaycry812839668/p/15032493.html

 

 

=============================================================

 

 

 

再一次更正前面的理解,看了文章, https://zhuanlan.zhihu.com/p/124994344   又有了新的理解。

 

 

从文章(https://zhuanlan.zhihu.com/p/124994344)可以知道其实Python基本数据类型是在C类型数据上进行包装的,也就是使用结构体在一层上面再套一层,如果这么说的话前文个人的观点就是错误的,在这种角度看调用C语言的动态链接库完全可以在Python类型数据上进行操作,这时我们只需要找到Python数据类型下的C类型数据即可。

 

前文认为的ctypes定义的数据类型是一种翻译,是一种关系映射,这一点还是没有问题的,只不过它不是在C语言内存空间下再次生成C类型数据,而是在Python数据类型下找到被包装起来的可以进行C语言库函数操作的数据类型,因为Python数据类型是在兼容C类型数据的基础上进行再次包装的。

 

换句话说Python数据类型是在C数据类型上进行包装的,而ctypes是对Python数据类型进行再次包装,而这次包装的目的是要把被隐藏起的C数据类型暴露出来。

 ctypes包装后的数据类型和被包装的Python数据类型是共享同一内存空间的,同时这部分内存空间是兼容C数据类型的,是可以调用C语言函数进行操作的。

 

 

 

所以前文说的调用C语言下的动态链接库中的函数是会自动在C类型内存空间中创建数据的观点是站不住的,因此这里我们更相信是ctypes把Python数据类型中包装的兼容C语言操作的数据类型或是对应的变量内存空间暴露出来,然后使Python函数和C函数都可以对这部分内存空间或是变量进行操作。

 

 

 

 

 

=============================================================

 

 重点参考文章:

 https://zhuanlan.zhihu.com/p/124994344

 

posted on 2021-07-20 22:37  Angry_Panda  阅读(73)  评论(0)    收藏  举报

导航