Python 调用VC++的动态链接库(DLL)


Posted in Python onSeptember 06, 2008

1. 首先VC++的DLL的导出函数定义成标准C的导出函数:

#ifdef LRDLLTEST_EXPORTS 
#define LRDLLTEST_API __declspec(dllexport) 
#else 
#define LRDLLTEST_API __declspec(dllimport) 
#endif extern "C" LRDLLTEST_API int Sum(int a , int b); 
extern "C" LRDLLTEST_API void GetString(char* pChar); 
//a + b 
LRDLLTEST_API int Sum(int a , int b) 
{ 
return a + b; 
} 
//Get a string 
LRDLLTEST_API void GetString(char* pChar) 
{ 
strcpy(pChar, "Hello DLL"); 
}

2. Python中调用如下:

from ctypes import * fileName="LRDllTest.dll" 
func=cdll.LoadLibrary(fileName) 
str = create_string_buffer(20) 
n = func.Sum(2, 3) 
func.GetString(str) 
print n 
print str.raw

关于C语言中的一些参数类型详见:http://www.python.org/doc/2.5/lib/node454.html

3. 输出结果:
5
Hello DLL

Python 相关文章推荐
Python import自定义模块方法
Feb 12 Python
python复制文件的方法实例详解
May 22 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
Nov 05 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Python3 模块、包调用&路径详解
Oct 25 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
详解Python 中的容器 collections
Aug 17 Python
Python接口自动化测试的实现
Aug 28 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python实现扫雷游戏的示例
Oct 20 Python
python中温度单位转换的实例方法
Dec 27 Python
Python urlopen 使用小示例
Sep 06 #Python
Python 网络编程起步(Socket发送消息)
Sep 06 #Python
Python  __getattr__与__setattr__使用方法
Sep 06 #Python
Python 深入理解yield
Sep 06 #Python
Python 初始化多维数组代码
Sep 06 #Python
Python enumerate遍历数组示例应用
Sep 06 #Python
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 #Python
You might like
PHP连接MongoDB示例代码
2012/09/06 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
关于Python错误重试方法总结
2021/01/03 Python
python中的时区问题
2021/01/14 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
2014年教师德育工作总结
2014/11/10 职场文书
会计求职自荐信范文
2015/03/04 职场文书
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL