导出c++;函数,将多个字符串作为参数传递 我试图把一些C++函数导出到Python中,而且它的工作时间很长,但是当函数在参数上比字符串更多时,我会遇到一些问题,第一个函数总是可以的,但是其他的总是很笨拙的。
C++代码:导出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
#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;
那样编写,错误就更明显了.