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")
分享到:
相关推荐
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库是用于调用C语言编写的动态链接库(DLL)或共享库的模块,这在进行跨语言的交互和系统级编程时非常有用。在这个特定的项目中,我们看到它被用于调用宇视(Uniview)网络设备的SDK,这是一个专门针对...
本示例“python调用动态链接库demo”提供了一个使用Python与C语言交互的实例。下面我们将详细探讨这个过程。 首先,`hello.c`和`hello.h`是C源代码和头文件。`hello.c`通常包含对外部调用的函数定义,而`hello.h`则...
它是一个外部函数库,为Python提供了与C语言兼容的数据类型,并允许Python代码调用动态链接库(DLLs)或共享库中的函数。通过ctypes模块,可以将这些库封装在纯Python代码中,无需编写额外的C代码。 标签“python c...
本案例聚焦于"C#/Python调用C动态链接库测试",这是一个涉及到多语言交互和系统级API调用的问题。动态链接库(DLL)是Windows操作系统中的一种共享库机制,允许多个程序共享同一段代码,节省内存并便于代码维护。...
在这种情况下,Python提供了ctypes库,允许我们无缝地调用C编译的动态链接库(DLLs或SOs),从而在Python中利用C库的功能。本主题将深入探讨如何使用ctypes库来封装并调用C开源音频引擎libsoundio。 libsoundio是一...
### 如何使用Python的ctypes调用医保中心的DLL动态库下载医保中心的账单 在实际工作中,经常需要与外部系统或者特定硬件设备交互,其中一种常见的技术手段就是通过编程语言调用DLL(动态链接库)文件。本文将详细...
- Python提供了多种方式与C/C++交互,其中一种常见的方式就是使用`ctypes`库来加载和调用动态链接库。 #### 三、准备工作 1. **环境准备** - 首先确保已安装Python及其开发工具包(例如pip等)。 - 安装`ctypes...
ctypes 模块是 Python 的一个外部扩展库,提供了一个强大的工具来调用动态链接库(DLL)。本文档将详细介绍 ctypes 模块的使用方法和相关知识点。 一、加载动态链接库 ctypes 模块可以加载动态链接库,导出 cdll ...
本教程将详细讲解如何使用Python调用C++编写的动态链接库(DLL),并涉及回调函数的实现,非常适合初学者学习。 首先,我们需要了解动态库的概念。动态库(Dynamic Link Library,简称DLL)是一种包含可由多个程序...
Python的ctypes模块是Python与C语言库交互的重要工具,它允许Python程序调用C编写的动态链接库(DLL)中的函数。ctypes提供了一种简单的方法,将Python对象转换为C数据类型,并且可以调用C库中的函数,使得Python...
`ctypes`模块在Python中主要用于加载和调用C语言编写的共享库(动态链接库)。无论是Windows下的`.dll`文件还是Linux下的`.so`文件,都可以通过`ctypes`进行加载。 **1.1 加载方式** - **在Windows上**: - 使用`...
Python中的`ctypes`模块是Python标准库的一部分,它允许我们直接在Python代码中调用C语言编写的动态链接库(DLLs on Windows,.so files on Linux等)。这个功能对于那些希望利用C库的强大功能,同时又不想或不能...
在Python中,ctypes库是与C语言兼容的类型库,它允许Python程序调用C语言编写的动态链接库(DLL)或共享库中的函数。当在Python中调用C语言编写的库函数时,会遇到参数类型和返回类型的问题。由于Python与C语言之间...
`ctypes`是Python的一个标准库,它允许我们直接调用C语言编译的动态链接库,从而实现了Python与C/C++代码的交互。 首先,我们需要理解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中的一个共享库,...
为了让Python能够找到SDK的动态链接库,需要将库路径添加到`LD_LIBRARY_PATH`环境变量中。 ```bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/hikvision-sdk/lib ``` **4. 创建Python项目** 创建一个...
Python调用C/C++动态链接库(DLL)是跨语言编程中常见的技术,它允许Python程序利用C或C++编写的高效代码。本篇将详细解释如何实现这一过程。 首先,我们需要了解C/C++动态链接库。DLL(Dynamic Link Library)是一种...
在Linux环境下,使用`gcc`编译器将`adder.c`编译成动态链接库(`.so`文件)。 ```bash gcc adder.c -fPIC -shared -o adder.so ``` 这里使用的选项解释如下: - `-fPIC`: 生成位置独立的代码,适用于共享库。 - `...