python dll调用_Python调用windows dll

从C++转换到Python不久,就开始喜欢脚本语言了。虽然有人不喜欢把Python叫做脚本语言,但是脚本二字说明了它最擅长的领域是文本处理。用它的正则表达式+List+Dictionary处理文本,真的是得心应手。

在某些领域,C++还是有不可替代的优势。因此有时会需要把某些功能C++做成模块,再在Python里面调用,或者在C++里面调用Python,都可以结合两者的优势,相互取长补短。

我想最简单的还是Python调用windows dll。我喜欢dll,因为它独立,不用暴漏代码。当然它的缺点是平台依赖。

正文开始:

1. 创建windows dll

用VC创建一个windows dll的工程。添加需要导出的接口(函数)。这些函数可以供Python调用。

test.h

#ifdef TEST_EXPORTS

#define TEST_API __declspec(dllexport)

#else

#define TEST_API __declspec(dllimport)

#endif

extern "C" TEST_API int fntest(void);

test.cpp

TEST_API int fntest(void)

{

return 42;

}

这里值得一提的是函数的定义要添加extern "C",以防止C++编译器的name mangling。如果不添加,Python会提示找不到函数定义。

2.Python里面调用windows dll导出的接口

test.py

import ctypes

dll = ctypes.windll.LoadLibrary( 'test.dll' )

test_result = ctypes.c_int(dll.fntest())

print(test_result.value)

相当的简单。值得一提的是,函数返回值在Python里面使用时,需要转换成ctypes模块里面定义的类型。例如,

test_result = ctypes.c_int(dll.fntest())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值