2016-03-18 11 views
0

私はcで作成した共有オブジェクトライブラリをインポートするためのインポートがあります。それは次のようになります。私のpythonファイルを実行しているとき、私はこのコードを打ったときAttributeError: 'module'オブジェクトには、CコードをPythonにインポートしようとすると属性がありません

status = Cal.Cal_readFile(filename, result) 

しかし私が手:

import Cal 

私はそのようには次のように共有オブジェクトライブラリとpythonでコールを作ってみますエラー以下:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/usr/lib/python3.4/tkinter/__init__.py", line 1541, in __call__ 
    return self.func(*args) 
    File "xcal.py", line 72, in openDialog 
    status = Cal.Cal_readFile(filename, result) 
AttributeError: 'module' object has no attribute 'Cal_readFile' 

は、共有オブジェクトライブラリに関する私のmakefileは次のようになります。

#include <python3.4/Python.h> 
#include "calutil.h" 

PyObject *Cal_readFile(PyObject *self, PyObject *args); 

static PyMethodDef CalMethods[] = { 
    {"readFile", Cal_readFile, METH_VARARGS}, 
    {NULL, NULL} 
}; 

static struct PyModuleDef calModuleDef = { 
    PyModuleDef_HEAD_INIT, 
    "Cal", //enable "import Cal" 
    NULL, //omit module documentation 
    -1, //don't reinitialize the module 
    CalMethods //link module name "Cal" to methods table 
}; 
PyMODINIT_FUNC PyInit_Cal(void) { 
    return PyModule_Create(&calModuleDef); 
} 

PyObject *Cal_writeFile(PyObject *self, PyObject *args) { 
    return NULL; 
} 

注: そして、私のCコードは、次のようになりますCal_writeFile機能は、実際のものは、それで何が起こっているんちょうど私がそれそうISN」として大きな機能を貼り付けたくありませんでしたこれを解決する必要があります。

私がここで間違っていることはありますか?私はPython import Calが正しくPythonファイルと同じディレクトリにあるCal.soという名前の共有オブジェクトライブラリをインポートしているはずです。

答えて

2
static PyMethodDef CalMethods[] = { 
    {"readFile", Cal_readFile, METH_VARARGS}, 
    {NULL, NULL} 
}; 

あなたの関数に与えたPython可視の名前は、readFileです。 Cal_readFileではなく、その名前でアクセスする必要があります。

+0

感謝します!それは問題を解決し、私ができるようになるとすぐにあなたの答えを受け入れます。 – ComputerLocus

+0

簡単な質問ですが、 'result'変数を変更してそのC関数内のC関数に渡すと、Python変数も同様に変更されますか? – ComputerLocus

+1

@Fogest:それが何を意味するかははっきりしない。いずれにしても、別の質問をしたいのであれば、それは "質問の追加"ボタンではなく、 "質問の質問"ボタンのためのものです。あなたはより多くの可視性を得るでしょう、あなたと潜在的な回答者は詳細やフォーマットオプションなどを追加する余地があります。 – user2357112

関連する問題