重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
int* GrabImage();
站在用户的角度思考问题,与客户深入沟通,找到酉阳土家族苗族网站设计与酉阳土家族苗族网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广、空间域名、雅安服务器托管、企业邮箱。业务覆盖酉阳土家族苗族地区。
int GetPixel(int* image, int x, int y);
void SetPixel(int* image, int x, int y, int color);
若你是想调用 c 编写的DLL,可以使用ctypes调入使用;
#!/usr/bin/python
from ctypes import *
import os
#需要使用绝对路径
extest = cdll.LoadLibrary(os.getcwd() + '/DemoC.so')
或在windows下
#!/usr/bin/python
import ctypes
import os
if os.name == 'nt': # windows系统
_lib_name = os.getcwd() + '/DemoC.DLL'
dl200_lib = ctypes.WinDLL(dl200_lib_name)
在函数声明加入前缀,如
__declspec(dllexport) int Fun(int a, int b)
否则在加载该dll时会提示找不到该符号
在windows下可以通过vs自带的dumpbin工具查看可被调用符号
dumpbin /exports test.dll
C函数在调用过程中关于参数传递和压栈由多种规定,作为dll提供给其他程序调用时,必须明确并统一为同一种调用规定,否则会导致栈破坏,编译器负责具体实现调用规定,主要有以下几种调用规定
python下调用C库有多种方式,ctypes是其中一种比较方便的,调用时首先需要加载dll文件,根据C dll的调用规定不同需要使用不同接口,使用ctypes需要 import ctypes 库
对于简单的C函数,例如 int add(int a, int b) , 此时就可以直接调用了,如
对于较复杂的C函数的参数情况,ctypes调用时对入参和出餐做一定处理,这里分情况讨论
以上包含了几种主要的参数传递情况,ctypes也提供了一个较为完整的python类型和C类型的对照,如下: