这是我在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或字节。
我能做些什么吗? 在此先感谢您的帮助。如果您了解更多信息以获得帮助,我很乐意将其包含在内。 问候。