当前位置:  开发笔记 > 编程语言 > 正文

如何使用ctypes将库的extern函数指针设置为Python回调函数?

如何解决《如何使用ctypes将库的extern函数指针设置为Python回调函数?》经验,为你挑选了1个好方法。



1> joeforker..:

这在ctypes中很棘手,因为ctypes函数指针不实现.value用于设置其他指针的属性.相反,投你的回调函数和外部函数指针void *c_void_p功能.在设置了void *如图所示的函数指针之后,C可以调用你的Python函数,你可以将函数作为函数指针检索并用普通的ctypes调用来调用它.

from ctypes import *

liblibrary = cdll.LoadLibrary('liblibrary.so')

def py_library_hook(strings, n):
    return 0

# First argument to CFUNCTYPE is the return type:
LIBRARY_HOOK_FUNC = CFUNCTYPE(c_int, POINTER(c_char_p), c_int)
hook = LIBRARY_HOOK_FUNC(py_library_Hook)
ptr = c_void_p.in_dll(liblibrary, 'library_hook')
ptr.value = cast(hook, c_void_p).value

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有