Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,C:如何通过Python访问用C编写的方法?_Python_C_Ctypes - Fatal编程技术网

Python,C:如何通过Python访问用C编写的方法?

Python,C:如何通过Python访问用C编写的方法?,python,c,ctypes,Python,C,Ctypes,我用C编写了一些函数,我想通过Python脚本访问它们。在我的研究中,我发现了ctypes和struct库,下面的教程解释了 要访问共享对象和DLL()。然而,我找不到一个简单的解决方案,如何在同一个文件夹中导入、使用或访问我的C方法 你能给我推荐一种如何通过Python访问我的C方法吗?看看,对我来说似乎很简单 基本上,您可以使用Python.h编写C函数,将其编译为动态库,这将成为一个Python模块。您必须将C方法编译成库 在windows上,必须首先将.dll放在Python可以找到它们

我用C编写了一些函数,我想通过Python脚本访问它们。在我的研究中,我发现了
ctypes
struct
库,下面的教程解释了 要访问共享对象和DLL()。然而,我找不到一个简单的解决方案,如何在同一个文件夹中导入、使用或访问我的C方法

你能给我推荐一种如何通过Python访问我的C方法吗?看看,对我来说似乎很简单


基本上,您可以使用Python.h编写C函数,将其编译为动态库,这将成为一个Python模块。

您必须将C方法编译成库

在windows上,必须首先将.dll放在Python可以找到它们的地方。 稍后您可以这样调用ctypes库

from ctypes import *
在linux上,必须使用dll加载程序的LoadLibrary方法,或者通过调用构造函数创建CDLL实例来加载库:

cdll.LoadLibrary("libc.so.6")
libc = CDLL("libc.so.6")
根据调用约定,您可以使用cdll、WINDL、stdcall或OLCEALL中的一种。例如,如果您有一个stdcall调用约定函数,请执行以下操作:

from ctypes import *
a = cdll.yourModule.MyIntFunction(9)
您可以像调用任何其他Python可调用函数一样调用这些函数。ctypes试图保护您不使用错误数量的参数或错误的调用约定调用函数。不幸的是,这只适用于Windows


ctypes定义了许多与c兼容的基本类型,请在此处找到完整的参考:

这可以让您开始了解您的代码是否编译为共享对象(或DLL)?阅读ctypes文档我想如果您试图使用现有的c库,您可以编写一个支持Python.h stuff的c包装器