在Python程序中导入ctypes模块,载入动态链接库。动态链接库有三种:cdll以及windows下的windll和oledll,cdll载入导出函数使用标准的cdecl调用规范的库,而windll载入导出函数符合stdcall调用规范(Win32 API的原生约定)的库,oledll也使用stdcall调用规范,并假设函数返回Windows的HRESULT错误代码。错误代码用于在出错时自动抛出WindowsError这个Python异常,可以使用COM函数得到具体的错误信息。

使用cdll.msvcrt即可调用MS标准的C库msvcrt,msvcrt包含了大部分标准C函数。
下面来看一下简单的printf函数。
from ctypes import *
msvcrt = cdll.msvcrt
str = "Huanhuan!"
msvcrt.printf("Hello %s\n", str)
这样就可以使用C语言中的printf函数进行输出。
如果在IDLE里运行的话会发现程序没有任何输出结果,这是因为printf是打印到真实的标准输出,而不是sys.stdout。如果想要看到运行结果,可以在CMD里运行python test.py来查看结果,前提是已经设置好了Python的环境变量。或者有一个曲线方法可以在IDLE中显示输出结果,请曲线阅读到文章最后。
如果使用的是Py3K,在控制台里会看到只有开头字符H被输出了。因为Py3K使用的是Unicode编码,而printf不支持该编码,所以需要转码。整理出来三种改写方法可以解决这一问题。
# A 转为byte类型 在字符串前面加b
from ctypes import *
msvcrt = cdll.msvcrt
str = b"Huanhuan!"
msvcrt.printf(b"Hello %s\n", str)
# B 使用wprintf宽字符显示
from ctypes import *
msvcrt = cdll.msvcrt
str = "Huanhuan!"
msvcrt.wprintf("Hello %s\n", str)
# C 转码为utf-8
from ctypes import *
msvcrt = cdll.msvcrt
str = "Huanhuan!"
result = "Hello " + str + "\n"
result = result.encode("utf-8")
msvcrt.printf(result)
最后来搞定在IDLE中曲线显示输出结果的方法。
from ctypes import *
msvcrt = cdll.msvcrt
str = b"Huanhuan!"
s = create_string_buffer(100) # 必须足够长
msvcrt.sprintf(s, b'Hello %s\n', str)
print(s.value.decode('utf-8'))
先使用sprintf函数把结果输出到s变量,然后再用Python自带的print方法输出s的value。
好了,通过以上的各种方法就可以解决Py3K调用C函数printf的问题了。
什么?你问我为什么费这么大劲非要用printf输出,而不是直接用Python自带的print?
python的print和c的printf有什么区别
print([object, ...], *, sep=' ', end='\n', file=sys.stdout, flush=False)
输出对象到流文件,sep指定分割符,end指定结束符。参数转换为字符串写入输出流,如果没有输出内容直接输出end结束符。file参数必须是包含write方法的对象,默认输出到标准输出。
int printf( char * format, ... );
根据参数 format 字符串来转换并格式化数据,然后将结果输出到标准输出设备(显示器),直到出现字符串结束('\0')为止。
参数 format 字符串可包含下列三种字符类型:
一般文本,将会直接输出
ASCII 控制字符,如\t、\n 等有特定含义
格式转换字符
格式转换为一个百分比符号(%)及其后的格式字符所组成。一般而言,每个%符号在其后都必需有一个参数与之相呼应(只有当%%转换字符出现时会直接输出%字符),而欲输出的数据类型必须与其相对应的转换字符类型相同。
# Python
# printf
# python 调用c语言函数的方法
# Python实现的调用C语言函数功能简单实例
# Python调用C/C++函数库的多种方法与实践指南
# Python调用C函数的5种方式总结大比拼(第3种最高效却鲜为人知)
# 的是
# 好了
# 三种
# 自带
# 转换为
# 就可以
# 有一个
# 而不是
# 动态链接库
# 错误代码
# 这一
# 将会
# 没有任何
# 要用
# 如果没有
# 这么大
# 不支持
# 可以使用
# 再用
# 这是因为
相关文章:
建站之星在线版空间:自助建站+智能模板一键生成方案
如何高效完成自助建站业务培训?
如何在云主机上快速搭建网站?
建站主机系统SEO优化与智能配置核心关键词操作指南
北京专业网站制作设计师招聘,北京白云观官方网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
制作网站外包平台,自动化接单网站有哪些?
存储型VPS适合搭建中小型网站吗?
PHP 500报错的快速解决方法
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
北京的网站制作公司有哪些,哪个视频网站最好?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
如何通过建站之星自助学习解决操作问题?
如何通过虚拟主机空间快速建站?
建站之星后台管理如何实现高效配置?
如何快速生成橙子建站落地页链接?
小建面朝正北,A点实际方位是否存在偏差?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
设计网站制作公司有哪些,制作网页教程?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何在建站主机中优化服务器配置?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何快速建站并高效导出源代码?
教程网站设计制作软件,怎么创建自己的一个网站?
建站之星官网登录失败?如何快速解决?
建站之星导航配置指南:自助建站与SEO优化全解析
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
南平网站制作公司,2025年南平市事业单位报名时间?
如何构建满足综合性能需求的优质建站方案?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
测试制作网站有哪些,测试性取向的权威测试或者网站?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何快速搭建安全的FTP站点?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
Android滚轮选择时间控件使用详解
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
,怎么用自己头像做动态表情包?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
深圳网站制作案例,网页的相关名词有哪些?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
,想在网上投简历,哪几个网站比较好?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
常州企业网站制作公司,全国继续教育网怎么登录?
如何在IIS中新建站点并配置端口与IP地址?
如何选择高效可靠的多用户建站源码资源?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何用AWS免费套餐快速搭建高效网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。