I solved this. It did require the Python caller obtaining the string size from the C++ DLL. The key part is to use ctypes.string_at() to then define the string at the Python end.
lib.fun.argtypes = [c_void_p, c_void_p] lib.fun.restype = c_void_p size = c_int() return_ptr = lib.fun(self.obj, byref(size)) cstring = string_at(return_ptr, size) On Wednesday, October 14, 2020 at 7:17:35 PM UTC-5 [email protected] wrote: > I think if you have to work with C types then you will need to provide > both a char* and an integer length. That Python error makes it sound like > the Python code is probably trying to parse beyond the end of the > serialized message. > > On Wed, Oct 14, 2020 at 3:55 PM Randy Nuss <[email protected]> wrote: > >> I am building a C++ library with protobuf messages for consumption by a >> Python program. The issue is SerializeToString() takes std::string, but >> only c_types (like char*) can be exported by the dll, which results in >> numerical zeros being recognized as string terminators and truncating the >> ParseFromString() process. >> >> I tried using SerializeToArray() but get the following error in Python: >> google.protobuf.message.DecodeError: Field number 0 is illegal. >> >> I would appreciate any suggestions. Thanks. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Protocol Buffers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/protobuf/9c3bf578-ba5b-4059-a64b-ec6731690a70n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/protobuf/9c3bf578-ba5b-4059-a64b-ec6731690a70n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/93aab028-c827-48b2-b3f8-654650d112e2n%40googlegroups.com.
