导出用于python的c++函数,传递几个字符串作为参数

2024-06-28 20:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图把一些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
È

第二个字符串参数总是一个奇怪的字符。 你知道这是从哪里来的吗?在

谢谢


Tags: 函数pystringreturnargsonepyobjectstd
2条回答

啊,别担心,我犯了个愚蠢的错误

^{1}$

应该是

^{pr2}$

它编译得太糟糕了,虽然它确实在使用

str2 = PyString_AsString(PyTuple_GET_ITEM(args, 1))

访问第二个字符串。在

一个小提示是,在返回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]

相关问题 更多 >