Форум сайта python.su
0
Есть несколько крупных математический функций написанных на С++. Переписывать на Питоне нет желания и времени. Можно ли (и тогда как) вставить их в прогу на Питоне??Чтобы конкретнее - есть файл math.cpp, в нем допустим 1 функция которой передается значение X она выдает (впринципе в какой форме скажете в такой и выдаст) значение Y. Суть в том что попросили на Питоне доделать прогу начатую на С++ :( или никак??
Офлайн
3
Можно воспользоваться генераторами оболочек т.е. созданием python-библиотек из C/C++ библиотек. Вот некоторые ссылки:
SWIG: http://www.swig.org/
SIP: http://www.riverbankcomputing.co.uk/sip/
там и дока есть.
Офлайн
0
В книге М.Лутца “Программирование на 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)
Офлайн
41
посмотри для примера http://slav0nic.xss.ru/projects/procfs.tar.gz
со времён “книги Лутца” python API вродже как поменяль (помню долго парился не понимая чего не компилится=) )
думаю простой срр легко “портировать”, просто сделать каркас и ретурны “сделать в питон” и всё
Офлайн
0
slav0nicСпасибо
посмотри для примера http://slav0nic.xss.ru/projects/procfs.tar.gz
со времён “книги Лутца” python API вродже как поменяль (помню долго парился не понимая чего не компилится=) )
думаю простой срр легко “портировать”, просто сделать каркас и ретурны “сделать в питон” и всё
Офлайн
0
slav0nicПорылся я в энтих исходниках и наваял примерно такое:
посмотри для примера http://slav0nic.xss.ru/projects/procfs.tar.gz
со времён “книги Лутца” python API вродже как поменяль (помню долго парился не понимая чего не компилится=) )
думаю простой срр легко “портировать”, просто сделать каркас и ретурны “сделать в питон” и всё
Офлайн
0
Александр1)Ругань при компиляции наверно потому что type,Table ето переменные объявленные внутри класса.
Собирается успешно. (SWIG)
Из под Пайтона работают все функции класса, кроме описаной выше, при вызове которой рушится программа
Я так полагаю, что это из-зи отсутсвия таблицы регистрации (PyMethodDef) и инициализации модуля (PyInintModule())
Но где мне их прописывать (имеется ввиду в классе)?
Или ошибка в чем другом?
P.S.: если объявляю в классе static PyObject* Room(PyObject* self,PyObject* args); то ругань при компиляции огромная
Отредактировано (Окт. 5, 2006 11:40:59)
Офлайн
0
koderКуда можно выложить?
Или выложи где-нить все исходники целиком
а то так сложно понять(мне по крайней мере)
Офлайн
0
koderTable объявлена внутри класса и работает успешно. Я это все сначала на С++ проверял, все работает
1)Ругань при компиляции наверно потому что type,Table ето переменные объявленные внутри класса.
(может кон. они и global но по прив. коду етого не видно)
Офлайн
0
АлександрПопробуй на рапиду rapidshare.de и кинь ссылку
Куда можно выложить?
Могу, конечно, и в форум, но длинноватые исходники
Офлайн