如何使用ctypes,python将字符串参数传递给C++函数

Posted

技术标签:

【中文标题】如何使用ctypes,python将字符串参数传递给C++函数【英文标题】:How to pass string parameters to C++ function using ctypes, python 【发布时间】:2016-08-30 02:46:12 【问题描述】:

我有一个 C++ DLL 库。一个函数如下所示。

Python 中的 DLL 导入是正确的。

int _ParseLogin2Resp(const std::string& username,
                     const std::string& password,
                     char szErr[1024]);

其实我已经尝试了很多方法来传递参数。我知道 C++ std::stringchar * 之间的区别。

1.使用c_char_p()和byref()

username = ctypes.c_char_p("username")
_ParseLogin2Resp(ctypes.byref(username),...)

2.使用create_string_buffer()

username = ctypes.create_string_buffer("username")
_ParseLogin2Resp(username,...)

但是函数ERROR返回

用户名或密码为空。

所以我找不到任何将字符串参数传递给我的函数的解决方案。

我的问题是。

是否有可能我可以传递正确的参数以按预期调用我的函数,或者我必须重写我的 dll 库以使函数正常工作?

【问题讨论】:

写一个接受char*的c函数,在这个函数中调用你需要的cpp函数。 【参考方案1】:

Python 文档说 ctypes 提供了 C 兼容的数据类型,最好在你的 DLL 中使用 c 风格的 API 接口。

【讨论】:

以上是关于如何使用ctypes,python将字符串参数传递给C++函数的主要内容,如果未能解决你的问题,请参考以下文章

Python ctypes:如何将 ctypes 数组传递给 DLL?

使用 ctypes 传递结构指针

将 FILE * 从 Python / ctypes 传递给函数

如何通过 ctypes 将(非空)列表从 Python 传递到 C++?

使用ctype在python中调用c

将图像从 python 包装器传递给 c++ 函数