0

为了尝试从 Python 调用 ac 函数(在上一篇文章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; 
}

任何帮助将不胜感激!谢谢你。

4

1 回答 1

1

扩展模块中唯一的函数以名称导出到 Python modsum。你打电话addTwo。这似乎不言自明。

看起来在 C 层,有一个名为的原始 C 函数为addTwoC 函数工作adder,然后以名称导出到 Python modsum。因此,您应该重命名导出,或者使用正确的名称调用它:

s = callingPy.modsum(a, b)

看起来您复制粘贴了一个骨架扩展模块,切换了一个很小的内部模块,并且没有修复任何导出或名称。

于 2015-12-30T01:40:50.977 回答