Здравствуйте, коллеги!
Решил тут занятся изучением питона одновременно с изучением возможностей его сопряжения с 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, не помогает. и В доках что-то не нашел, и интернет в основном говорит о написании модулей, а о подключении — типа все просто — раз и работает.
Здравствуйте, FR, Вы писали:
FR>Поменяй расширение с .dll на .pyd
А как все остальное должно именоваться?
Т.е.
// boost/python
BOOST_PYTHON_MODULE(hello)
// или ручками
PyMODINIT_FUNC
inithello(void)
{
...
а результирующая dll должна носить имя hello.pyd, я правильно понял?