#include<stdio.h>int ADD(int X , int Y){ return X+Y;}
Add.py文件#!/usr/bin/env pythonimport ctypesDLLs = ctypes.cdll.LoadLibraryLibs = DLLs("./Adds.so")print Libs.ADD(5,4)
Add.c文件是一个简单的加法函数,参数为两个int,函数返回这个个参数之和 和第一部分差不多,首先编译 Add.py文件,然后执行python脚本 jd@jd-desktop:~/163/p1/2$ gcc -shared -fPIC Add.c -o Adds.so jd@jd-desktop:~/163/p1/2$ ls -l 总用量 16 -rw-rw-r-- 1 jd jd 59 10月 4 17:13 Add.c -rw-rw-r-- 1 jd jd 106 10月 4 17:13 Add.py -rwxrwxr-x 1 jd jd 7853 10月 4 17:14 Adds.so jd@jd-desktop:~/163/p1/2$ python Add.py 9 jd@jd-desktop:~/163/p1/2$ ~~~~~~~~p3~~~~~~~~ 看样子似乎不错,那么我们继续吧 CountArray.c#include<stdio.h>void CountArray(int* pt int Len){ SUMs = 0 for(int i = 0 ; i < Len ; ++i) SUMs += *(pt+i) printf("SUM Is %d.",SUMs)}
这是一个很普通的求数组和的函数,传入一个int数组的首个元素地址和数组长度,然后球这个数组所有元素的和 于是,按照上面2个部分,我们自然想到了写一个 CountArray.py然后编译C的文件,运行python脚本 CountArray.py#!/usr/bin/env pythonimport ctypesDLLs = ctypes.cdll.LoadLibraryLibs = DLLs("./CountArray.so")Libs.CountArray(/*手动滑稽*/,10)
请允许我使用这样一个表情。。 我想你也看到问题了,对于python来说,他的类型和C有很大不同,如果一个C函数不需要参数,或者参数是python里存在的类型,那在python里直接调用一切OK,但当这个类型python中不存在的时候,你就会发现无法给调用的(C/C++)函数一个合适的参数 对于函数返回值也有同样的问题。。。