Python и модуль на C++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.10.09 15:18
Оценка:
Здравствуйте, коллеги!

Решил тут занятся изучением питона одновременно с изучением возможностей его сопряжения с C/C++.
Платформа — Win32, Python 2.6.

Написал такую прогу по бустовским докам:
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python.hpp>

char const* greet()
{
   return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}


Собралось.
Как использовать из питона, не понял, скрипт
import hello_ext
printf hello.greet()

выдает

ni module named hello_ext


Собрал такой пример:
#ifdef _DEBUG
    #undef _DEBUG
#endif
#include <Python.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>


static PyObject *SpamError;

static PyObject *
spam_system(PyObject *self, PyObject *args)
{
    const char *command;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command);
    return Py_BuildValue("i", sts);
}

static PyMethodDef SpamMethods[] = {
    //...
    {"system",  spam_system, METH_VARARGS,
     "Execute a shell command."},
    //...
    {NULL, NULL, 0, NULL}        /* Sentinel */
};

PyMODINIT_FUNC
initspam(void)
{
    PyObject *m;

    m = Py_InitModule("spam", SpamMethods);
    if (m == NULL)
        return;

    SpamError = PyErr_NewException("spam.error", NULL, NULL);
    Py_INCREF(SpamError);
    PyModule_AddObject(m, "error", SpamError);
}


Ситуация та же. Не может подключить модуль. Я по разному перепробовал именовать, и имя dll-ки использовал, и делал чтоб имя модуля совпадало с именем dll, не помогает. и В доках что-то не нашел, и интернет в основном говорит о написании модулей, а о подключении — типа все просто — раз и работает.
Маньяк Робокряк колесит по городу
Re: Python и модуль на C++
От: FR  
Дата: 04.10.09 06:39
Оценка: +1
Здравствуйте, Marty, Вы писали:


M>Ситуация та же. Не может подключить модуль. Я по разному перепробовал именовать, и имя dll-ки использовал, и делал чтоб имя модуля совпадало с именем dll, не помогает. и В доках что-то не нашел, и интернет в основном говорит о написании модулей, а о подключении — типа все просто — раз и работает.


Поменяй расширение с .dll на .pyd
Re: Python и модуль на C++
От: SergASh  
Дата: 04.10.09 10:01
Оценка:
Здравствуйте, Marty, Вы писали:
>[skipped]

А можно узнать какие задачи вы будете решать путем подключения питона к с++?
Сам копаюсь в питоне, но пока не понимаю для чего бы полезного его применить.
Re[2]: Python и модуль на C++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 04.10.09 11:17
Оценка:
Здравствуйте, FR, Вы писали:

FR>Поменяй расширение с .dll на .pyd


А как все остальное должно именоваться?
Т.е.
// boost/python
BOOST_PYTHON_MODULE(hello)
// или ручками
PyMODINIT_FUNC
inithello(void)
{
...


а результирующая dll должна носить имя hello.pyd, я правильно понял?
Маньяк Робокряк колесит по городу
Re[2]: Python и модуль на C++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 04.10.09 11:22
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Здравствуйте, Marty, Вы писали:

>>[skipped]

SAS>А можно узнать какие задачи вы будете решать путем подключения питона к с++?

SAS>Сам копаюсь в питоне, но пока не понимаю для чего бы полезного его применить.

Я тут делаю небольшой фреймворк для поддержки компонентной модели разработки, пока только C/C++, но хочу ввести аналог COM IDispatch и поддержку динамических языков, решил начать с питона. Пока конкретных задач нет, но думаю его встроить потом в один проект для описания управляющей логики (бизнес-логики).
Маньяк Робокряк колесит по городу
Re[3]: Python и модуль на C++
От: FR  
Дата: 04.10.09 11:29
Оценка:
Здравствуйте, Marty, Вы писали:


M>а результирующая dll должна носить имя hello.pyd, я правильно понял?


Угу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.