无符号长*缓冲区 我试图用C++来扩展Python来与一个工具对话。但是我在指针和缓冲区方面遇到了一些问题。我对C++/C语言还是新手

无符号长*缓冲区 我试图用C++来扩展Python来与一个工具对话。但是我在指针和缓冲区方面遇到了一些问题。我对C++/C语言还是新手,python,pointers,Python,Pointers,在我的C头文件中,我有一个函数: long EXPORT read_output(long DeviceID, char* Buffer, unsigned long Length, unsigned long* BytesRead); 因此,我在Python模块中创建了这个函数: static PyObject * Py_Get_ASCII(PyObject *self, PyObject *args) { long DeviceID; char* Buffer; unsigne

在我的C头文件中,我有一个函数:

long EXPORT read_output(long DeviceID, char* Buffer, unsigned long Length, unsigned long* BytesRead);
因此,我在Python模块中创建了这个函数:

static PyObject *
Py_Get_ASCII(PyObject *self, PyObject *args)
{
  long DeviceID;
  char* Buffer;
  unsigned long* BytesRead;
  int param = PyArg_ParseTuple(args, "lz", &DeviceID, &Buffer);
  //something for BytesRead (dont' know)***
  long response = read_output(DeviceID, Buffer, strlen(Buffer), BytesRead);
  // * enter more code depending on value of response
  Py_INCREF(Py_None);
  return Py_None;
}

这可能很愚蠢,但我不知道应该如何解释unsigned long*BytesRead并为其创建缓冲区。头文件只说BytesRead应该表示读取的字节数,我假设是设备读取的字节数。除了我尝试合并BytesRead外,一切似乎都正常。我希望能在我应该做的事情上得到一些帮助

如果read\u输出是读取某个内容,它可能会返回参数BytesRead中读取的字节数。因此,read_output需要一个指针,指向它将存储读取字节数的位置。然后必须在调用函数Py_Get_ASCII中将其声明为“unsigned long BytesRead”,并将其作为“&BytesRead”传递给函数。

您不需要任何缓冲区

传统上,实例化实际的无符号long,然后向其传递指针:

unsigned long BytesRead = 0;
long response = read_output(DeviceID, Buffer, strlen(Buffer), &BytesRead);
//                                                            ^^^^^^^^^^
现在BytesRead包含读取的字节数


这种技术被称为,并绕过函数只能返回一个值的限制。

您考虑过使用吗?没有C++/C这样的语言。您真正使用的是哪种语言?然后移除另一个标签。谢谢。@LightnessRacesinOrbit好的,如果有帮助的话。删除我的答案作为评论,无论如何你已经发布了答案。@SouravGhosh谢谢!这也很有帮助!:还有没有更优雅的解决方案来使用char*Buffer?我尝试实例化它,然后得到输出:char Buffer=;长响应=读取\输出设备ID和缓冲区、strlenBuffer和字节读取;但是我得到一个错误,说我不能将char转换成char*。。。