0
首先的功能,問題是,程序無法與雙內存釋放...的Python:通C++對象的腳本,然後調用擴展C++,從腳本
該協議是: 我
FooCPlusPlus *obj;
我將它傳遞給我的腳本。它工作正常。就像這樣:
PyObject *pArgs, *pValue;
pArgs = Py_BuildValue("((O))", obj);
pValue = PyObject_CallObject(pFunc, pArgs);
其中pFunc是一個Python函數... 所以,我的劇本具有的功能,在這裏我用的obj。
def main(args)
...
pythonObj = FooPython(args[0])
...
# hardcore calculation of "x"
...
...
pythonObj.doWork(x)
當然我定義蟒類
class FooPython:
def __init__(self, data):
self._base = data
def doWork(arg):
import extend_module
extend_module.bar(self._base, arg)
「Extend_module」 是我已經定義函數 「欄」 的擴展的C++模塊。
我預計「酒吧」功能可以正常工作,但代替它,我得到了內存錯誤:「雙內存空閒或腐敗」。
這裏是 「欄」 功能:
static PyObject* bar(PyObject *self, PyObject *args)
{
PyObject *pyFooObject = 0;
int arg;
int ok = PyArg_ParseTuple(args,"Oi",&pyRuleHandler, &arg);
if(!ok) return 0;
void * temp = PyCObject_AsVoidPtr(pyFooObject);
FooCPlusPlus* obj = static_cast<FooCPlusPlus*>(temp);
obj->method(arg); // some c++ method
return PyCObject_FromVoidPtr((void *) ruleHandler, NULL);
}
它未能在 「酒吧」 的return語句...
代碼中存在很多錯誤,所以在返回語句之前應該會失敗。 – 2009-09-28 14:04:59
老兄,當然我在這裏寫了一個非常抽象的代碼模型,以便於理解。 我的問題是「代碼包含什麼原則性錯誤?」。 明顯的印刷錯誤是在最後一行 - 我應該寫「obj」而不是「ruleHandler」。 但無論如何,我堅持認爲代碼在返回聲明失敗,而不是之前。 所以我想你不明白我的問題。 – Nelly 2009-10-08 16:20:34