2010-01-27 19 views
17

¿Alguien sabe de un proyecto para implementar Google Protocol Buffers en Delphi?Delphi Protocol Buffers?

+0

no se ve tan difícil tener un ir en él mismo (a sí mismo?), es sólo el tiempo (el tiempo !!) me gustaría tener una unas pocas horas más por día. –

+2

¡Amén! Esperaba ayudar y no comenzar de cero. –

+1

Sitio Protocol Buffers: http://code.google.com/p/protobuf/ protobuf-net es una implementación de .NET: http://code.google.com/p/protobuf-net/ Basado en arriba debe ser más trabajo de lo que pensé primero. Me gustaría una versión win32 o no .net en Delphi. –

Respuesta

9

Este proyecto contiene la implementación de Protocolo Buffers para Delphi. Desde el proyecto se implementó la funcionalidad limitada necesaria para un proyecto específico. En ese momento, no veo sentido transferir todo el código del proyecto. http://sourceforge.net/projects/protobuf-delphi/

+0

y no se ha vuelto a tocar desde 2011. Vea a continuación para la respuesta de Fundamentos que parece mantenerse activamente. –

+1

La versión 1.1 se publicó en abril de 2013. –

2

Puede ser mejor que encuentre/cree un puente C++/Delphi, en lugar de volver a implementar Protocolos de protocolo. La base de código es bastante grande.

0

Me pregunto qué piensas de usar JSON o BSON parece un trabajo en progreso) como protocolo.

+0

Parece que los búferes de protocolo son más ricos en características, ya que permiten elementos opcionales, por lo que es más parecido a un protocolo XML + XSD/WSDL/SOAP que a un formato de serialización – mjn

14

aquí:

Fundamentos Protocol Buffers 4.00.01 (10 Feb 2013)

Google Protocol Buffers

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

+2

Parece que se mantiene activamente. +1 para esto mientras que la respuesta aceptada parece estar congelada y nunca se ha tocado desde 2011. –

1

He encontrado another one en el GitHub. (desarrollado de Feb.2014 a Jul.2016, a partir de junio de 2017)

Parece tener preliminary proto3 support.

No lo probé todavía, pero puede ser el mejor a partir de hoy.

https://github.com/stijnsanders/DelphiProtocolBuffer

EDIT: He probado esto, pero parece estar escrita en la antigua Delphi y no unicode listo.

pude compilar el generador (utilizando 10 Seattle), pero exe compilado no podía generar el archivo pas :-(

Edit2:

El generador de código funciona sólo la sustitución de TStream a TStreamReader/escritor . confirmé generador puede convertir reciente address book sample.

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 
Cuestiones relacionadas