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.

Reply via email to