当前位置: 首页 > 工具软件 > ctypes > 使用案例 >

Python Ctypes

濮阳烨然
2023-12-01

使用python Ctypes 调用 C本地函数库

Sample 1:

1. 使用ctypes的第一步要导入ctypes module

from ctypes import *

2. 指定要访问的C语言动态库

hello = CDLL( 'libhello.so' )

3. 导入要访问的函数接口,严格一点,要指定接口的参数和返回值类型

myprint = hello.myprint
myprint.restype = c_int
myprint.argtypes = [ c_char_p ]

4. 在Python中,可以调用myprint来传递给C语言一个字符串

myprint( b'String from Python' )

Sample 2,回调函数:

1. 定义回调函数类型,类似C中的函数指针,如void ( * event_cb )( void * data, void * user_data ),定义为:

event_cb = CFUNCTYPE( None, c_void_p, c_void_p )

None表示返回值是void,也可以为其它类型,剩余俩个参数与C中的回调参数一致。

2. 定义Python回调函数:

def event_arrived( data, user_data ):
    #parsing data
    #...
    #return something or None

3. 注册回调函数:

register_events_listener( event_cb( event_arrived ), c_void_p( 0 ))

另外,使用ctypes可以避免GIL的问题。

Sample 3,传递结构体指针:

1. 定义结构体:

class MyStructure( Structure )
    _fields_ = [
        ( 'x', c_int ),
        ( 'y', c_int )]

2. 传递结构体:

_local = MyStructure( 1, 2 )
process_this_structure( byref( _local ))

 类似资料:

相关阅读

相关文章

相关问答