开发者社区> 问答> 正文

将函数指针转换为可调用对象

你已经获得了一个被编译函数的内存地址,想将它转换成一个Python可调用对象, 这样的话你就可以将它作为一个扩展函数使用了。

展开
收起
哦哦喔 2020-04-17 18:14:36 2851 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    将函数指针转换为可调用对象:可以参考这篇文章: https://www.baidu.com/link?url=6djl4oF9q-bjXsKIc7n5xA5eoO3YbD_ISURCaytWx9o0B2dmmEhXclgxb_R

    2020-04-17 23:57:13
    赞同 展开评论 打赏
  • ctypes 模块可被用来创建包装任意内存地址的Python可调用对象。 下面的例子演示了怎样获取C函数的原始、底层地址,以及如何将其转换为一个可调用对象:
    
    >>> import ctypes
    >>> lib = ctypes.cdll.LoadLibrary(None)
    >>> # Get the address of sin() from the C math library
    >>> addr = ctypes.cast(lib.sin, ctypes.c_void_p).value
    >>> addr
    140735505915760
    
    >>> # Turn the address into a callable function
    >>> functype = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_double)
    >>> func = functype(addr)
    >>> func
    <CFunctionType object at 0x1006816d0>
    
    >>> # Call the resulting function
    >>> func(2)
    0.9092974268256817
    >>> func(0)
    0.0
    >>>
    
    2020-04-17 18:14:45
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载