专栏首页python3Python调用DLL

Python调用DLL

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中运行的

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python在Linux的安装

    在Redhat系Linux上安装python, 执行: sudo yum install python

    用户2398817
  • centos 下PYTHON 升级2.7

    1. 利用cd命令进入想下载的目录(我一般使用/tmp) 2. 下载压缩包 # wget http://www.python.org/ftp/python/2....

    用户2398817
  • caffe Ununtu 16.04.

    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 改为:

    用户2398817
  • Expression 表达式树学习整理

    整理了一下表达式树的一些东西,入门足够了 先从ConstantExpression 开始一步一步的来吧  它表示具有常量值的表达式 我们选建一个控制台应用程序 ...

    lpxxn
  • 4768 跳石头

    4768 跳石头 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一年一度的“...

    attack
  • P1325 雷达安装

    题目描述 描述: 假设海岸线是一条无限延伸的直线。它的一侧是陆地,另一侧是海洋。每一座小岛是在海面上的一个点。雷达必须安装在陆地上(包括海岸线),并且每个雷达都...

    attack
  • LeetCode 202: 快乐数 Happy Number

    一个 “快乐数” 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如...

    爱写bug
  • 【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】

    题意:给出n个点的坐标,问取出其中任意点围成的区域的最小值! 很明显,找到一个合适的三角形即可。

    _DIY
  • 7-4 字符串排序

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    韩旭051
  • 新手学习selenium路线图(老司机亲手绘制)

    前言: 最近群里有不少小白,想入手selenium,但是一直没找到学习路线,还没入门就迷路了,于是小编亲手绘制了一幅学习路线图。希望能帮助小白快速入门,帮助已经...

    上海-悠悠

扫码关注云+社区

领取腾讯云代金券