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

yipeiwu_com6年前Python基础
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针对众多的类型,提供了众多的内建函数来处理,这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作,下面话不多说了,来一看看详...

合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友

这时候还需要把各个工作表合并到一起来形成一个汇总表。这时候比较麻烦也比较容易出错,因为各个表的学号不一定都是一致的、对齐的。因为可能会有人缺考,有人会考号涂错等等。特奉献以下代码,用于合...

在python中以相同顺序shuffle两个list的方法

通常做机器学习问题时,需要准备训练数据,通常会把样本数据和标签存放于2个list中,比如train_x = [x1,x2,...,xN][x1,x2,...,xN],train_y =...

简单介绍Python2.x版本中的cmp()方法的使用

 cmp()方法比较两个列表的元素。 语法 以下是cmp()方法的语法: cmp(list1, list2) 参数     lis...

Django 拆分model和view的实现方法

Django 拆分model和view的实现方法

在标准的dgango项目中,自动生成的目录结构会包括models.py和views.py两个文件,分别在里面写model的代码和controller的代码,但是所有的代码都写在一个文件里...