python编程(python调用dll程序)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

 

    很多人说python的效率比较低,主要是没有分清什么时候用python、什么时候用c。对于网络、gui或者业务层面的代码,用python是完全可以的。但是对于算法、演算或者性能相关的逻辑,必须用c或者c++实现。因此回到windows平台,学会用python调用dll程序,是十分有必要的。用python调用dll不复杂,做好这几步就可以了,

 

1、创建一个dll工程

就按照vs2017的要求,“新建”-》“项目”-》“Visual C++”-》“Windows 桌面”-》“动态链接库”,一步一步创建工程即可

 

2、添加额外的函数代码

extern "C"
{
	_declspec (dllexport) int add(int a, int b)
	{
		return  a + b;
	}

	_declspec (dllexport) int sub(int a, int b)
	{
		return a - b;
	}
}

 

3、编译工程,检验是否生成dll文件

选择项目,右击,选择“重新生成解决方案”

 

4、开始编写python代码

import ctypes
lib=ctypes.cdll.LoadLibrary("Dll1.dll")

 

5、验证是否可以使用add函数、sub函数

print lib.add(1,2)
print lib.sub(1.2)

 

6、可以试试还没有实现的函数,会不会出现调用异常

比如print lib.mul(1,2)

 

7、继续测试,数据类型不一致是否发生异常

比如print lib.add(1.1, 2.2)

 

8、验证句柄信息是否正确

比如print lib

 

9、数据传递

目前python里面整数、字符串都是可以传递给c程序的

如果是复杂一点的数据结构,建议直接用字符串组装传递进去,c程序收到后用sscanf解析

反过来,如果c的结果传给python,一般函数的返回值可以传递出来的,因此是字符串的话,可以通过多次调用函数获取返回值的方法来解决

 

10、其他

如果是发布给客户的应用程序,最好是用pyinstaller封装下,再加上必要的资源文件、dll文件、config配置文件,这样就可以了

 

注1:

如果c和python之间只是简单的数据传输,那么整数和字符串就可以了

一旦不是简单的数据,那么最好使用python原生的api,这样处理的效率更高点

 

注2:

注意使用ctypes库

https://docs.python.org/zh-cn/3.7/library/ctypes.html

 

 

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页