`
willzh
  • 浏览: 300200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用python ctypes调用动态链接库

阅读更多
ctypes is very cool! Great piece of work.
           - Just van Rossum

ctypes使得python能够直接调用c语言开发的动态链接库,非常强大。
为了使用CTypes,你必须依次完成以下步骤:
    * 编写动态连接库程序
    * 载入动态连接库
    * 将Python的对象转换为ctypes所能识别的参数
    * 使用ctypes的参数调用动态连接库中的函数

来个简单的实例吧:

1. 编写动态链接库

// filename: foo.c

#include <stdio.h>
char* myprint(char *str)
{
    puts(str);
    return str;
}

float add(float a, float b)
{
    return a + b;
}


以上foo.c代码,linux下编译为动态链接库文件,命令是:
gcc -fPIC -shared foo.c -o foo.so


2. ctypes调用

#!/usr/bin/env python
# FILENAME: foo.py

from ctypes import *

foo = CDLL('./foo.so')

myprint = foo.myprint
myprint.argtypes = [POINTER(c_char)] # 参数类型,为char指针
myprint.restype = c_char_p # 返回类型,同样为char指针
res = myprint('hello')
print res

add = foo.add
add.argtypes = [c_float, c_float] # 参数类型,两个float(c_float内ctypes类型)
add.restype = c_float
print add(1.3, 4.2)



文档请参考http://docs.python.org/library/ctypes.html

3. 查找链接库

>>> from ctypes.util import find_library
>>> find_library("m")
'libm.so.6'
>>> find_library("c")
'libc.so.6'
>>> find_library("bz2")
'libbz2.so.1.0'
>>>


调用libc里的printf:
#filename: printf_example.py

import ctypes
from ctypes.util import find_library

printf = ctypes.CDLL(find_library("c")).printf

printf("hello, world\n")





1
1
分享到:
评论

相关推荐

    python环境调用Fortran语言生成的动态链接库(一个简单的示例)

    python环境调用Fortran语言生成的动态链接库(一个简单的示例): 1. main.for integer function mysum(a, b) bind(C,name="mysum") !GCC$ATTRIBUTES DLLEXPORT,CDECL :: mysum integer, value :: a,b mysum =...

    python ctypes 调用宇视网络设备sdk 登录、截图、云台控制等,二次开发,联系方式1261806584(QQ)

    Python的ctypes库是用于调用C语言编写的动态链接库(DLL)或共享库的模块,这在进行跨语言的交互和系统级编程时非常有用。在这个特定的项目中,我们看到它被用于调用宇视(Uniview)网络设备的SDK,这是一个专门针对...

    python调用动态链接库demo.zip

    本示例“python调用动态链接库demo”提供了一个使用Python与C语言交互的实例。下面我们将详细探讨这个过程。 首先,`hello.c`和`hello.h`是C源代码和头文件。`hello.c`通常包含对外部调用的函数定义,而`hello.h`则...

    ctypes--Python调用c接口.pdf

    它是一个外部函数库,为Python提供了与C语言兼容的数据类型,并允许Python代码调用动态链接库(DLLs)或共享库中的函数。通过ctypes模块,可以将这些库封装在纯Python代码中,无需编写额外的C代码。 标签“python c...

    C#/Python调用C动态链接库测试

    本案例聚焦于"C#/Python调用C动态链接库测试",这是一个涉及到多语言交互和系统级API调用的问题。动态链接库(DLL)是Windows操作系统中的一种共享库机制,允许多个程序共享同一段代码,节省内存并便于代码维护。...

    python通过ctypes封装调用c开源音频引擎libsoundio

    在这种情况下,Python提供了ctypes库,允许我们无缝地调用C编译的动态链接库(DLLs或SOs),从而在Python中利用C库的功能。本主题将深入探讨如何使用ctypes库来封装并调用C开源音频引擎libsoundio。 libsoundio是一...

    如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单

    ### 如何使用Python的ctypes调用医保中心的DLL动态库下载医保中心的账单 在实际工作中,经常需要与外部系统或者特定硬件设备交互,其中一种常见的技术手段就是通过编程语言调用DLL(动态链接库)文件。本文将详细...

    python调用动态链接库的基本过程详解

    - Python提供了多种方式与C/C++交互,其中一种常见的方式就是使用`ctypes`库来加载和调用动态链接库。 #### 三、准备工作 1. **环境准备** - 首先确保已安装Python及其开发工具包(例如pip等)。 - 安装`ctypes...

    python-ctypes模块中文帮助文档参照.pdf

    ctypes 模块是 Python 的一个外部扩展库,提供了一个强大的工具来调用动态链接库(DLL)。本文档将详细介绍 ctypes 模块的使用方法和相关知识点。 一、加载动态链接库 ctypes 模块可以加载动态链接库,导出 cdll ...

    python调用c++动态库Demo

    本教程将详细讲解如何使用Python调用C++编写的动态链接库(DLL),并涉及回调函数的实现,非常适合初学者学习。 首先,我们需要了解动态库的概念。动态库(Dynamic Link Library,简称DLL)是一种包含可由多个程序...

    python ctypes 中文帮助

    Python的ctypes模块是Python与C语言库交互的重要工具,它允许Python程序调用C编写的动态链接库(DLL)中的函数。ctypes提供了一种简单的方法,将Python对象转换为C数据类型,并且可以调用C库中的函数,使得Python...

    python-ctypes模块中文帮助文档.docx

    `ctypes`模块在Python中主要用于加载和调用C语言编写的共享库(动态链接库)。无论是Windows下的`.dll`文件还是Linux下的`.so`文件,都可以通过`ctypes`进行加载。 **1.1 加载方式** - **在Windows上**: - 使用`...

    使用c lib的python模块ctypes

    Python中的`ctypes`模块是Python标准库的一部分,它允许我们直接在Python代码中调用C语言编写的动态链接库(DLLs on Windows,.so files on Linux等)。这个功能对于那些希望利用C库的强大功能,同时又不想或不能...

    python ctypes库2_指定参数类型和返回类型详解

    在Python中,ctypes库是与C语言兼容的类型库,它允许Python程序调用C语言编写的动态链接库(DLL)或共享库中的函数。当在Python中调用C语言编写的库函数时,会遇到参数类型和返回类型的问题。由于Python与C语言之间...

    Python中调用C++dll例子

    `ctypes`是Python的一个标准库,它允许我们直接调用C语言编译的动态链接库,从而实现了Python与C/C++代码的交互。 首先,我们需要理解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中的一个共享库,...

    linux下使用python调用海康威视SDK包

    为了让Python能够找到SDK的动态链接库,需要将库路径添加到`LD_LIBRARY_PATH`环境变量中。 ```bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/hikvision-sdk/lib ``` **4. 创建Python项目** 创建一个...

    Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库(DLL)是跨语言编程中常见的技术,它允许Python程序利用C或C++编写的高效代码。本篇将详细解释如何实现这一过程。 首先,我们需要了解C/C++动态链接库。DLL(Dynamic Link Library)是一种...

    Python使用ctypes调用C/C++的方法

    在Linux环境下,使用`gcc`编译器将`adder.c`编译成动态链接库(`.so`文件)。 ```bash gcc adder.c -fPIC -shared -o adder.so ``` 这里使用的选项解释如下: - `-fPIC`: 生成位置独立的代码,适用于共享库。 - `...

Global site tag (gtag.js) - Google Analytics