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

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

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

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

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

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

python调用dll

来源:千锋教育
发布人:xqq
时间: 2023-11-08 23:31:04

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-08

python多进程与多线程的简单区分

2023-11-08

pythoninput在python中的使用注意

2023-11-08

最新文章NEW

Python好处多,0基础怎么学?

2023-11-08

python返回函数有什么作用?

2023-11-08

python pyqt5系统中查找文件

2023-11-08

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>