Python - 如何将LP_c_char_p转换为str或字节?

时间:2017-05-05 15:31:36

标签: python c++ json callback ctypes

这是我在stackoverflow中的第一个问题。 我一直在寻找答案,但我找不到。

我正在尝试获取一个应该包含字符串的回调。这个回调来自C ++ DLL。与dll加载和回调相关的所有内容都有效,但是当解析回调内容时,它会崩溃。

调试我已经看到了如何调用我的回调实现,我可以打印一个" Hello"在那里,但回调的返回对象无法序列化。这是错误:

TypeError: the JSON object must be str, bytes or bytearray, not 'LP_c_char_p'

这就是我加载dll的方法。我正在使用cdll:

self.dxc_dll = cdll.DxC

我的回调声明(使用ctypes)是这样的:

self.callback_type = CFUNCTYPE(c_char_p, POINTER(c_char_p))
self.callback = self.callback_type(self.callback_impl)

方法,callback_impl有这个签名:

def callback_impl(self, result):
    print("Callback works. Result: ", result)
    my_object = MyClass(result)
    ...

这是MyClass init构造函数:

def __init__(self, json_string):
    self.__dict__ = json.loads(json_string)

在我的C ++库中,Callback签名以这种方式声明(它使用PInvoke和C#工作,我已经完成了,但在这种情况下不是这样):

CCallback::CCallback(char *(__stdcall  *func)(char *))

所以我不知道它是否与json.loads行为有关,或者是否需要将 LP_c_char_p 转换为str或字节。

  • 我使用的是标准的ctypes和json库 蟒蛇。
  • 我在Windows 10 x64,Python 3.6.1上使用PyCharm 2017 32位和dll库是使用Visual编译的32位版本 Studio 2013(也在Windows下)

我能做些什么吗? 在此先感谢您的帮助。如果您了解更多信息以获得帮助,我很乐意将其包含在内。 问候。

0 个答案:

没有答案