Я пытаюсь интегрировать ActivePython 2.4. в С++.
Задача приблезительно такая: есть с++ класс, есть его объет. У класса есть метод. который по строке текста запускает интепритатор питона.
Причем в этой строке текста надо иметь возможность вызывать методы и самого этого С-шного класса
#include <Python.h>
static PyObject*
emb_Set(PyObject *self, PyObject *args)
{
char *key, *value;
if(!PyArg_ParseTuple(args, "ss", &key, &value))
return NULL;
// do something with the C++ class here
// how the get the class instance pointer?
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef EmbMethods[] = {
{"Set", emb_Set, METH_VARARGS, "Sets the given variable."},
{NULL, NULL, 0, NULL}
};
//вот собственно описание класса
class MyClass
{
public:
int i;
char ch50[50];
MyClass(int x, char* y)
{
i=x;
strcpy(ch50,y);
}
int GetI() {return i; }
//Метод получает строку текста Python и должен его выполнить
void runPhitonScriptMethod(char* script)
{
Py_Initialize();
PyObject *m = Py_InitModule("test", EmbMethods);
PyObject *c_api_object = PyCObject_FromVoidPtr((void *)this, NULL);
if (c_api_object)
{
PyModule_AddObject(m, "MyObj", c_api_object);
PyRun_SimpleString(script);
}
Py_Finalize();
}
};
int main( int argc, char **argv )
{
MyClass obj(5,"Vision Master");
obj.runPhitonScriptMethod
(
"import test"
"\nprint test.MyObj.GetI()\n"
);
getch();
}
компиляия проходит без ошибок/предупреждений, но во время исполнения имеем
Traceback (most recent call last):
File "<string>", line 6, in ?
AttributeError: 'PyCObject' object has no attribute 'GetI'
[6597 refs]
Причем картина не меняется при попытки обращения к свойству, или когда делаешь метод виртуальным (это уже совсем на всякий случай
Что самое интересное, когда я в скрипте при помощи функции help(...) пытаюсь просмотреть содержимое моего подключенного модуля, оно абсолютно пустое
07.04.05 20:27: Перенесено модератором из 'C/C++' — WolfHound