前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python调用DLL

Python调用DLL

作者头像
py3study
发布2020-01-08 10:56:24
2.6K0
发布2020-01-08 10:56:24
举报
文章被收录于专栏:python3python3

C语言中的函数默认是__cdecl调用,C++中可用__stdcall来显示声明调用,但也可以用extern “C”

用python调用dll时需要根据不同的调用约定而使用不同的函数。但是不管什么调用,最后都必须用extern “C”来防止名字粉碎。

dll源文件:

[cpp] view plaincopy

 #include <iostream> 
 extern "C" _declspec(dllexport) int __stdcall stdAdd(int a, int b)  
 {  
     std::cout << "This is __stdcall dll" << std::endl;  
  return a + b;  
 }  
  
 extern "C" _declspec(dllexport) int cdeAdd(int a, int b)  
 {  
     std::cout << "This is __cdecl dll" << std::endl;  
  return a + b;  
 }  

python代码:

[python] view plaincopy

 #!/usr/bin/python 
  
 from ctypes import *  
 dll = windll.LoadLibrary('D:/CodeFile/Monitor/Debug/CppDll.dll')  
 print(dll.stdAdd(2, 4))  
 print(dll.cdeAdd(2, 4))  

最后结果:

由结果可知,cdeAdd访问出现异常。

总结:如果dll是stdcall调用,则python中用windll加载,如果dll是cdecl调用,则python用cdll加载。

注*以上是在python3.3中运行的

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档