千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:南昌千锋IT培训  >  技术干货  >  python调用dll

python调用dll

来源:千锋教育
发布人:xqq
时间: 2023-11-12 02:59:27

python中调用dll文件中的接口比较简单,实例代码如下:

如我们有一个test.dll文件,内部定义如下:

extern"C"

{

int__stdcalltest(void*p,intlen)

{

returnlen;

}

}

在python中我们可以用以下两种方式载入

1.

importctypes

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

2.

importctypes

dll=ctypes.WinDll('test.dll')

其中ctypes.windll为ctypes.WinDll类的一个对象,已经在ctypes模块中定义好的。在test.dll中有test接口,可直接用dll调用即可

nRst=dll.test()

printnRst

由于在test这个接口中需要传递两个参数,一个是void类型的指针,它指向一个缓冲区。一个是该缓冲区的长度。因此我们要获取到python中的字符串的指针和长度

#方法一:

sBuf='aaaaaaaaaabbbbbbbbbbbbbb'

pStr=ctypes.c_char_p()

pStr.value=sBuf

pVoid=ctypes.cast(pStr,ctypes.c_void_p).value

nRst=dll.test(pVoid,len(pStr.value))

#方法二:

test=dll.test

test.argtypes=[ctypes.c_char_p,ctypes.c_int]

test.restypes=ctypes.c_int

nRst=test(sBuf,len(sBuf))

如果修改test.dll中接口的定义如下:

extern"C"

{

int__cdecltest(void*p,intlen)

{

returnlen;

}

}

由于接口中定义的是cdecl格式的调用,所以在python中也需要用相应的类型

1.

importctypes

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

##注:一般在linux下为test.o文件,同样可以使用如下的方法:

##dll=ctypes.cdll.LoadLibrary('test.o')

2.

importctypes

dll=ctypes.CDll('test.dll')

以上内容为大家介绍了python调用dll,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

Python和人工智能的关系

2023-11-12

Python单条语句计时

2023-11-12

Python当中生成器和迭代器的使用

2023-11-12

最新文章NEW

Python中怎么写复数

2023-11-12

Python如何实现excel筛选

2023-11-12

Python如何复制文件中的内容

2023-11-12

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>