ctypes python std::string
ctypes python std::string
我正在使用 C++ 作为后端的 ctypes。现在C++中有这样的函数:
void HandleString(std::string something){
...
}
我想知道如何从 python 调用这个函数 - 没有 ctype(c_char_p显然不起作用(向这个函数发送字符串参数......
我如何解决这个问题并将字符串从 Python 传递到 c++(并将参数更改为 char* 某些东西不是和选项(
PS我可以创建这样的解决方法吗?
- 将 Python 字符串作为c_char_p发送到将 char* 转换为 std::string 的函数C++
- 以某种方式返回字符串或其指针???!!(如何?到蟒蛇
- 将其从python发送到HandleString函数(但再次我觉得我必须在此处将参数更改为字符串*(
听起来最简单的
方法是在库周围编写一个薄的 c++ 包装器,其唯一目的是将参数从 python 重新协商到更复杂的 c++ 类。
这种方法也将有助于解决未来同类问题,而不会给 python 代码或 c++ 代码增加任何真正的复杂性。
Python
C API 将 Python str
对象转换为 char*
,然后是从char*
(实际上是char const*
(的C++隐式转换到std::string
.
如果 Python 字符串可以包含空字符,则必须使用 PyString_AsStringAndSize
转换,并传递两个值(char*
和Py_ssize_t
(;有一个显式转换这些也要std::string
:std::string( pointer, length )
.
std::string 的内存布局取决于库、平台和架构。下面的代码适用于 Windows 上使用 Visual C++ 的 64 位 DLL 构建。如果不工作,则需要调整 StdString 结构。祝你好运!
def createStdStringObj(s):
# Structure that represents the memory layout of std::string
# that depends on library, platform and architecture used.
# The layout works for a 64 bit DLL build with Visual C++
# on Windows, adapt it if it is not working!
class StdString(Structure):
_fields_ = [
("data", c_char_p), # Pointer to character data
("size", c_size_t), # Size of the string
("capacity", c_size_t), # Capacity of the string
]
data = s.encode("utf-8")
stds = StdString()
stds.data = c_char_p(data)
stds.size = len(data)
stds.capacity = len(data)
return stds
dllFcn(createStdStringObj('this is it'))
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- C++:考虑C++ std::string 中双引号 (") 的字面含义,而不使用反斜杠 (\)
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- std::string, std::wstring and UTF8
- uan inplace replacement of std::string/std::wstring?
- #define Glib::string std:wstring
- 从 std::string & std::wstring 中获取 char 整数值
- BSTR转换为std::string(std::wstring),反之亦然