Форум сайта python.su
Есть несколько крупных математический функций написанных на С++. Переписывать на Питоне нет желания и времени. Можно ли (и тогда как) вставить их в прогу на Питоне??Чтобы конкретнее - есть файл math.cpp, в нем допустим 1 функция которой передается значение X она выдает (впринципе в какой форме скажете в такой и выдаст) значение Y. Суть в том что попросили на Питоне доделать прогу начатую на С++ :( или никак??
Офлайн
Можно воспользоваться генераторами оболочек т.е. созданием python-библиотек из C/C++ библиотек. Вот некоторые ссылки:
SWIG: http://www.swig.org/
SIP: http://www.riverbankcomputing.co.uk/sip/
там и дока есть.
Офлайн
В книге М.Лутца “Программирование на Python” тоже неплохо рассказано о SWIG
А у меня вопрос такой:
У меня есть класс на С++, примерно такой:
#include <vector>
#include <cstring>
#include <new>
class Table {
/* */
char* name;
public:
std::vector<std::vector<char*> >* t;
Table(char* n)
{
name=n;
t=new std::vector<std::vector<char*> >(1),(1);
(*t)=new char;
strcpy((*t),“My_string!”);
}
~Table()
{
delete (*t);
delete t;
}
};
С помощью того же SWIG я скомпиллил либу и модуль для Питона
На С++ классом можно пользоваться так:
#include “tclass.h”
#include <stdio.h>
main()
{
Table tbl(“dbf”);
printf(“%s\n”, (*tbl.t));
return 0;
}
А как на Питоне? У него ж указателей нет!
Я пишу так:
from tclass import Table
tbl=Table(“My_string!”)
print tbl.t # Это не то, так как Питон воспринимает этот не разыменованый указатель как строку
Отредактировано (Апрель 19, 2006 10:13:01)
Офлайн
посмотри для примера http://slav0nic.xss.ru/projects/procfs.tar.gz
со времён “книги Лутца” python API вродже как поменяль (помню долго парился не понимая чего не компилится=) )
думаю простой срр легко “портировать”, просто сделать каркас и ретурны “сделать в питон” и всё
Офлайн
slav0nicСпасибо
посмотри для примера http://slav0nic.xss.ru/projects/procfs.tar.gz
со времён “книги Лутца” python API вродже как поменяль (помню долго парился не понимая чего не компилится=) )
думаю простой срр легко “портировать”, просто сделать каркас и ретурны “сделать в питон” и всё
Офлайн
slav0nicПорылся я в энтих исходниках и наваял примерно такое:
посмотри для примера http://slav0nic.xss.ru/projects/procfs.tar.gz
со времён “книги Лутца” python API вродже как поменяль (помню долго парился не понимая чего не компилится=) )
думаю простой срр легко “портировать”, просто сделать каркас и ретурны “сделать в питон” и всё
Офлайн
Александр1)Ругань при компиляции наверно потому что type,Table ето переменные объявленные внутри класса.
Собирается успешно. (SWIG)
Из под Пайтона работают все функции класса, кроме описаной выше, при вызове которой рушится программа
Я так полагаю, что это из-зи отсутсвия таблицы регистрации (PyMethodDef) и инициализации модуля (PyInintModule())
Но где мне их прописывать (имеется ввиду в классе)?
Или ошибка в чем другом?
P.S.: если объявляю в классе static PyObject* Room(PyObject* self,PyObject* args); то ругань при компиляции огромная
Отредактировано (Окт. 5, 2006 11:40:59)
Офлайн
koderКуда можно выложить?
Или выложи где-нить все исходники целиком
а то так сложно понять(мне по крайней мере)
Офлайн
koderTable объявлена внутри класса и работает успешно. Я это все сначала на С++ проверял, все работает
1)Ругань при компиляции наверно потому что type,Table ето переменные объявленные внутри класса.
(может кон. они и global но по прив. коду етого не видно)
Офлайн
АлександрПопробуй на рапиду rapidshare.de и кинь ссылку
Куда можно выложить?
Могу, конечно, и в форум, но длинноватые исходники
Офлайн