Deine Implementierung geht in die richtige Richtung, du kannst folgendes aber allgemein gültig machen, damit auch Android unterstützt wird und unter Windows tut es auch nicht weh:
procedure TProtoBufOutput.writeRawData(const buf; size: integer);
begin
FBuffer.Add(@buf, size);
//writeRawData(@buf, size); //endless loop for some
OS
end;