python调用c写函数 python调用c程序

python 调用c函数里面的函数吗若python调用c写函数你是想调用 c 编写的DLL,可以使用ctypes调入使用python调用c写函数;
#!/usr/bin/python
from ctypes import *
import os
#需要使用绝对路径
extest = cdll.LoadLibrary(os.getcwd()'/DemoC.so')
或在windows下
#!/usr/bin/python
import ctypes
import os
【python调用c写函数 python调用c程序】if os.name == 'nt': # windows系统
_lib_name = os.getcwd()'/DemoC.DLL'
dl200_lib = ctypes.WinDLL(dl200_lib_name)
怎样让Python脚本与C程序互相调用二、Python调用C/C\x0d\x0a\x0d\x0a\x0d\x0a1、Python调用C动态链接库\x0d\x0a\x0d\x0aPython调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可 。\x0d\x0a(1)C语言文件:pycall.c\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a/***gcc -o libpycall.so -shared -fPIC pycall.c*/\x0d\x0a#include\x0d\x0a#include\x0d\x0aint foo(int a, int b)\x0d\x0a{\x0d\x0aprintf("you input %d and %d\n", a, b);\x0d\x0areturn a b;\x0d\x0a}\x0d\x0a(2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c 。使用g编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译 。\x0d\x0a(3)Python调用动态库的文件:pycall.py\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0aimport ctypes\x0d\x0all = ctypes.cdll.LoadLibrary\x0d\x0alib = ll("./libpycall.so")\x0d\x0alib.foo(1, 3)\x0d\x0aprint '***finish***'\x0d\x0a(4)运行结果:\x0d\x0a\x0d\x0a\x0d\x0a2、Python调用C(类)动态链接库 \x0d\x0a\x0d\x0a需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C方法 。不是用extern "C" , 构建后的动态链接库没有这些函数的符号表 。\x0d\x0a(1)C类文件:pycallclass.cpp\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a#include\x0d\x0ausing namespace std;\x0d\x0a\x0d\x0aclass TestLib\x0d\x0a{\x0d\x0apublic:\x0d\x0avoid display();\x0d\x0avoid display(int a);\x0d\x0a};\x0d\x0avoid TestLib::display() {\x0d\x0acout\x0d\x0ausing namespace std;\x0d\x0aint test()\x0d\x0a{\x0d\x0aint a = 10, b = 5;\x0d\x0areturn a b;\x0d\x0a}\x0d\x0aint main()\x0d\x0a{\x0d\x0acout\x0d\x0a#include\x0d\x0a#include\x0d\x0a\x0d\x0aint fac(int n)\x0d\x0a{\x0d\x0aif (n
回答于 2022-11-16
python使用ctypes调用C编译dll函数方法在函数声明加入前缀,如
__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类型的对照,如下:
关于python调用c写函数和python调用c程序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读