CPPYY / CTYPES将字符串数组作为char * args []传递>

问题描述 投票:3回答:2
我最近才开始使用cppyyctypes,因此这可能是一个愚蠢的问题。我有以下C ++函数:

float method(const char* args[]) { ... }

并且从Python我想将args作为字符串列表传递,即:

args = *magic* x = cppyy.gbl.method(args)

我以前找到了this,所以我用过

def setParameters(strParamList): numParams = len(strParamList) strArrayType = ct.c_char_p * numParams strArray = strArrayType() for i, param in enumerate(strParamList): strArray[i] = param lib.SetParams(numParams, strArray)

和来自Python:

args = setParameters([b'hello', b'world'])

c_types.c_char_p需要一个字节数组。但是,当调用x = cppyy.gbl.method(args)时,我得到

TypeError: could not convert argument 1 (could not convert argument to buffer or nullptr)

我不完全确定为什么这会出错,因为args<__main__.c_char_p_Array_2>对象,我认为应该将其转换为const char* args[]

我最近才开始使用cppyy和ctypes,因此这可能是一个愚蠢的问题。我具有以下C ++函数:float method(const char * args []){...},从Python中,我想...

python c++ arrays string ctypes
2个回答
1
投票
为了提供具体示例,我将其用作.cpp文件:

0
投票
ctypes没有C / C ++可用于扩展编写器的公共API,因此cppyy对ctypes的处理必然有些笨拙。出问题的是,生成的const char*的ctypes数组的类型为const char*[2]而不是const char*[],并且由于cppyy对ctypes类型执行直接类型匹配,因此失败。
© www.soinside.com 2019 - 2024. All rights reserved.