导出c++;函数,将多个字符串作为参数传递 我试图把一些C++函数导出到Python中,而且它的工作时间很长,但是当函数在参数上比字符串更多时,我会遇到一些问题,第一个函数总是可以的,但是其他的总是很笨拙的。

导出c++;函数,将多个字符串作为参数传递 我试图把一些C++函数导出到Python中,而且它的工作时间很长,但是当函数在参数上比字符串更多时,我会遇到一些问题,第一个函数总是可以的,但是其他的总是很笨拙的。,python,c++,Python,C++,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 &l

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);
    }

}
结果是:

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


谢谢

啊,没关系,我的角色犯了个愚蠢的错误

char* str1, str2;
应该是

char* str1, *str2;
太糟糕了,它被编译了,尽管使用

str2 = PyString_AsString(PyTuple_GET_ITEM(args, 1))

访问第二个字符串。

啊,没关系,我犯了个愚蠢的错误

char* str1, str2;
应该是

char* str1, *str2;
太糟糕了,它被编译了,尽管使用

str2 = PyString_AsString(PyTuple_GET_ITEM(args, 1))

要访问第二个字符串。

一个小音符,请记住
Py\u INCREF(Py\u None)返回Py_None之前,如参考中所述[

或者使用
Py\u RETURN\u NONE
macro[

一个小提示,在返回Py\u NONE之前,请记住
Py\u INCREF(Py\u NONE);
,如参考文献中所述[
或者使用
Py\u RETURN\u NONE
macro[

是否尝试了
示例。两个字符串((“abcd”,“efgh”))
示例。两个字符串([“abcd”,“efgh”))
?嗯,元组还是一样的,但它似乎适用于列表,而且我必须使用不同的方法来解析列表…这让我想到,当我用宏访问元组对象的第二个字符串时,我可以正确地得到它:PyString\u AsString(PyTuple\u get\u ITEM(args,1))你试过了吗
示例。两个字符串((“abcd”,“efgh”))
示例。两个字符串([“abcd”,“efgh”])
?嗯,对于元组仍然是一样的,但它似乎可以用于列表,而且我必须使用不同的方法来解析列表…这让我想到,当我使用宏访问tuple对象的第二个字符串时,我可以正确地获取它:PyString\u AsString(PyTuple\u get\u ITEM(args,1))这就是为什么有些代码约定要求*和&绑定到变量名,而不是类型:)像
char*str1,str2;
那样编写,错误就更明显了。这就是为什么有些代码约定要求*和&绑定到变量名,而不是类型:)像
char*str1,str2;
那样编写,错误就更明显了.