设为首页 收藏本站
查看: 700|回复: 0

[经验分享] 用python调用C的动态链接库

[复制链接]

尚未签到

发表于 2015-11-29 11:51:15 | 显示全部楼层 |阅读模式
  暂时Python写得不好,有些东西还是用C写起来顺手,遇到这种情况怎么办呢…于是学习了一下python调用C动态链接库的方法。这样就可以将用C写好的函数提供给python使用了。
  首先要将先新建个DLL工程。例如我新建了dlllearning工程,内包含example.h和example.cpp两个文件。
  代码如下:



1 //example.h
2 #ifndef EXPORT_EXAMPLE_DLL
3 #define EXAMPLE_API __declspec(dllimport)
4 #else
5 #define EXAMPLE_API __declspec(dllexport)
6 #endif
7
8
9 extern "C" {
10     EXAMPLE_API int max(int, int);
11     EXAMPLE_API int min(int, int);
12 }


1 //example.cpp
2 #define EXPORT_EXAMPLE_DLL
3 #include "example.h"
4
5 EXAMPLE_API int max(int a, int b) {
6     return a > b ? a : b;
7 }
8
9 EXAMPLE_API int min(int a, int b) {
10     return a < b ? a : b;
11 }
  关于__declspec(dllimport)的作用可以参考这篇博文:http://blog.csdn.net/mniwc/article/details/7993361
  注意extern "c"是必须的,如果按照C++编译的话会有意想不到的问题发生,提示如下:



Traceback (most recent call last):
mx = dlllearning.max(a, b)
File "E:\Python34\lib\ctypes\__init__.py", line 364, in __getattr__
func = self.__getitem__(name)
File "E:\Python34\lib\ctypes\__init__.py", line 369, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'max' not found
[Finished in 0.2s]
  
  编译生成dll文件,我们用python调用一下看看。
  



1 from ctypes import *
2 dlllearning = cdll.LoadLibrary('dlllearning.dll')
3 a = 413
4 b = 52
5 mx = dlllearning.max(a, b)
6 mn = dlllearning.min(a, b)
7 print(mx, mn)
  
  输出结果:



413 52
[Finished in 0.2s]
  
  顿时感觉打开了新世界的大门

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144888-1-1.html 上篇帖子: python学习之--自定义函数: 下篇帖子: 深入super,看Python如何解决钻石继承难题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表