我试图把一些C++函数导出到Python中,而且它的工作时间很长,但是当函数在参数上比字符串更多时,我遇到了一些问题,第一个函数总是可以的,但是其他的总是很荒谬的。在
C++代码:
#include <Python.h>
#include <iostream>
PyObject* wrap_one_string(PyObject *self, PyObject *args)
{
char* str;
if (!PyArg_ParseTuple(args,"s:wrap_one_string",&str))
{
return nullptr;
}
std::cout << str << std::endl;
return Py_None;
}
PyObject* wrap_two_string(PyObject *self, PyObject *args)
{
char* str1, str2;
if (!PyArg_ParseTuple(args,"ss:wrap_one_string", &str1, &str2))
{
return nullptr;
}
std::cout << str1 << std::endl << str2 << std::endl;
return Py_None;
}
static PyMethodDef exampleMethods[] = {
{ "one_string", wrap_one_string, METH_VARARGS, nullptr },
{ "two_string", wrap_two_string, METH_VARARGS, nullptr },
{ nullptr, nullptr, 0, nullptr}
};
extern "C"
{
__declspec(dllexport)
void initexample()
{
PyObject *m;
m = Py_InitModule("example", exampleMethods);
}
}
python代码:
^{pr2}$结果是:
ab
abcd
È
第二个字符串参数总是一个奇怪的字符。 你知道这是从哪里来的吗?在
谢谢
啊,别担心,我犯了个愚蠢的错误
^{1}$应该是
^{pr2}$它编译得太糟糕了,虽然它确实在使用
访问第二个字符串。在
一个小提示是,在返回Py None之前记住
Py_INCREF(Py_None);
,如参考文献[https://docs.python.org/2/extending/extending.html#back-to-the-example]中所述 或使用Py_RETURN_NONE
宏[https://docs.python.org/2/c-api/none.html#c.Py_RETURN_NONE]相关问题 更多 >
编程相关推荐