通过 Python 调用 C 函数 - 编译后
Calling a C function through Python - after compilation
试图从 Python 调用 c 函数(在之前的 post Calling a C function from a Python file. Getting error when using Setup.py file 中),我已将代码编译成 .pyd 文件并正在测试程序.
但是,我遇到了错误
AttributeError: 'module' object has no attribute 'addTwo'
我的测试文件是这样的:
import callingPy
a = 3
b = 4
s = callingPy.addTwo(a, b)
print("S", s)
其中callingPy是编译后的.c文件(变成.pyd):
#include <Python.h>
#include "adder.h"
static PyObject* adder(PyObject *self, PyObject *args)
{
int a;
int b;
int s;
if (!PyArg_ParseTuple(args,"ii",&a,&b))
return NULL;
s = addTwo(a,b);
return Py_BuildValue("i",s);
}
/* DECLARATION OF METHODS*/
static PyMethodDef ModMethods[] = {
{"modsum", adder, METH_VARARGS, "Descirption"},
{NULL,NULL,0,NULL}
};
// Module Definition Structure
static struct PyModuleDef summodule = {
PyModuleDef_HEAD_INIT,"modsum", NULL, -1, ModMethods
};
/* INITIALIZATION FUNCTION*/
PyMODINIT_FUNC PyInit_callingPy(void)
{
PyObject *m;
m = PyModule_Create(&summodule);
return m;
}
如有任何帮助,我们将不胜感激!
谢谢你。
扩展模块中唯一的函数导出到 Python,名称为 modsum
。你打电话给 addTwo
。这好像是self-explanatory.
看起来在C层,有一个名为addTwo
的原始C函数为C函数adder
做工作,然后导出到Python下名字 modsum
。所以你应该重命名导出,或者用正确的名称调用它:
s = callingPy.modsum(a, b)
看起来你 copy-pasted 一个骨架扩展模块,切换了一个微小的内部,并且没有修复任何导出或名称。
试图从 Python 调用 c 函数(在之前的 post Calling a C function from a Python file. Getting error when using Setup.py file 中),我已将代码编译成 .pyd 文件并正在测试程序. 但是,我遇到了错误
AttributeError: 'module' object has no attribute 'addTwo'
我的测试文件是这样的:
import callingPy
a = 3
b = 4
s = callingPy.addTwo(a, b)
print("S", s)
其中callingPy是编译后的.c文件(变成.pyd):
#include <Python.h>
#include "adder.h"
static PyObject* adder(PyObject *self, PyObject *args)
{
int a;
int b;
int s;
if (!PyArg_ParseTuple(args,"ii",&a,&b))
return NULL;
s = addTwo(a,b);
return Py_BuildValue("i",s);
}
/* DECLARATION OF METHODS*/
static PyMethodDef ModMethods[] = {
{"modsum", adder, METH_VARARGS, "Descirption"},
{NULL,NULL,0,NULL}
};
// Module Definition Structure
static struct PyModuleDef summodule = {
PyModuleDef_HEAD_INIT,"modsum", NULL, -1, ModMethods
};
/* INITIALIZATION FUNCTION*/
PyMODINIT_FUNC PyInit_callingPy(void)
{
PyObject *m;
m = PyModule_Create(&summodule);
return m;
}
如有任何帮助,我们将不胜感激! 谢谢你。
扩展模块中唯一的函数导出到 Python,名称为 modsum
。你打电话给 addTwo
。这好像是self-explanatory.
看起来在C层,有一个名为addTwo
的原始C函数为C函数adder
做工作,然后导出到Python下名字 modsum
。所以你应该重命名导出,或者用正确的名称调用它:
s = callingPy.modsum(a, b)
看起来你 copy-pasted 一个骨架扩展模块,切换了一个微小的内部,并且没有修复任何导出或名称。