Jua*_* MC 5 c++ python json ctypes callback
这是我在stackoverflow中的第一个问题.我一直在寻找答案,但我找不到.
我试图获得一个应该包含字符串的回调.这个回调来自C++ DLL.与dll加载和回调相关的所有内容都有效,但是当解析回调内容时,它会崩溃.
调试我已经看到了如何调用我的回调实现,我可以在那里打印"Hello",但回调的返回对象无法序列化.这是错误:
TypeError: the JSON object must be str, bytes or bytearray, not 'LP_c_char_p'
Run Code Online (Sandbox Code Playgroud)
这是我加载DLL的方式.我正在使用cdll:
self.dxc_dll = cdll.DxC
Run Code Online (Sandbox Code Playgroud)
我的回调声明(使用ctypes)是这样的:
self.callback_type = CFUNCTYPE(c_char_p, POINTER(c_char_p))
self.callback = self.callback_type(self.callback_impl)
Run Code Online (Sandbox Code Playgroud)
方法callback_impl有这个签名:
def callback_impl(self, result):
print("Callback works. Result: ", result)
my_object = MyClass(result)
...
Run Code Online (Sandbox Code Playgroud)
这是MyClass init构造函数:
def __init__(self, json_string):
self.__dict__ = json.loads(json_string)
Run Code Online (Sandbox Code Playgroud)
在我的C++库中,Callback签名以这种方式声明(它使用PInvoke和C#工作,我已经完成了,但在这种情况下不是这样):
CCallback::CCallback(char *(__stdcall *func)(char *))
Run Code Online (Sandbox Code Playgroud)
所以我不知道它是否与json.loads行为有关,或者之前需要将LP_c_char_p转换为str或bytes.
有什么我能做的吗?在此先感谢您的帮助.如果您了解更多信息以获得帮助,我将很乐意将其包含在内.问候.