Буферы протокола Delphi? - PullRequest
19 голосов
/ 27 января 2010

Кто-нибудь знает о проекте по внедрению буферов протокола Google в Delphi?

Ответы [ 5 ]

17 голосов
/ 21 февраля 2013

Здесь:

Основные протоколы буферов 4.00.01 (10 февраля 2013 г.)

Буферы протокола Google

http://fundementals.sourceforge.net/dl.html

10 голосов
/ 22 ноября 2011

Этот проект содержит реализацию буферов протокола для Delphi. Из проекта был реализован ограниченный функционал, необходимый для конкретного проекта. В то время я не вижу никакого смысла переносить весь код проекта. http://sourceforge.net/projects/protobuf-delphi/

2 голосов
/ 03 февраля 2010

Возможно, вам лучше найти / создать мост C ++ / Delphi, чем заново реализовывать буферы протокола. Кодовая база довольно большая.

1 голос
/ 06 июня 2017

Я нашел еще один на github. (разработано с февраля 2014 г. по июль 2016 г. по состоянию на июнь 2017 г.)

Похоже, что предварительная поддержка proto3 .

Я еще не тестировал, но он может быть лучшим на сегодняшний день.

https://github.com/stijnsanders/DelphiProtocolBuffer

EDIT: Я проверил это, но, похоже, он написан на старом Delphi и не готов к Unicode.

Я мог бы скомпилировать генератор (используя 10 Сиэтл), но скомпилированный exe не смог сгенерировать файл pas: - (

EDIT2:

Генератор кода работает, просто заменяя TStream на TStreamReader / Writer. Я подтвердил, что генератор может преобразовать недавний пример адресной книги .

diff --git a/ProtBufParse.pas b/ProtBufParse.pas
index f29d7c7..cdd734d 100644
--- a/ProtBufParse.pas
+++ b/ProtBufParse.pas
@@ -236,16 +236,13 @@ var

   procedure LoadCode;
   var
-    f:TFileStream;
+    sr:TStreamReader;
   begin
-    f:=TFileStream.Create(FilePath,fmOpenRead or fmShareDenyWrite);
+    sr:=TStreamReader.Create(FilePath, True{DetectBOM});
     try
-      //TODO: UTF-8? UTF-16?
-      CodeL:=f.Size;
-      SetLength(Code,CodeL);
-      if f.Read(Code[1],CodeL)<>CodeL then RaiseLastOSError;
+      Code := sr.ReadToEnd;
     finally
-      f.Free;
+      sr.Free;
     end;
   end;

diff --git a/dpbp.dpr b/dpbp.dpr
index 4049480..b6dab90 100644
--- a/dpbp.dpr
+++ b/dpbp.dpr
@@ -22,7 +22,7 @@ var
   p:TProtocolBufferParser;
   s,t,InputFN,OutputFN,RelPath:string;
   i,j,l,l1:integer;
-  f:TFileStream;
+  sw:TStreamWriter;
   fv:TProtocolBufferParserValue;
   ff:TProtocolBufferParserFlag;
   Flags:TProtocolBufferParserFlags;
@@ -134,11 +134,12 @@ begin

         writeln('Writing '+OutputFN);
         s:=p.GenerateUnit(Flags);
-        f:=TFileStream.Create(OutputFN,fmCreate);
+
+        sw:=TStreamWriter.Create(OutputFN,False,TEncoding.UTF8);
         try
-          f.Write(s[1],Length(s));
+          sw.Write(s);
         finally
-          f.Free;
+          sw.Free;
         end;

       finally
0 голосов
/ 17 марта 2011

Интересно, что вы думаете об использовании JSON или BSON в качестве протокола в процессе работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...