2010-01-27 15 views
17

Qualcuno sa di un progetto per eseguire un'implementazione dei buffer del protocollo Google in Delphi?Buffer protocollo Delphi?

+0

non sembra così difficile da avere un andare a io stesso (solo?), è solo il tempo (il tempo !!) mi piacerebbe avere un poche ore in più al giorno. –

+2

Amen! Speravo di aiutare e non iniziare da zero. –

+1

Sito Protocol Buffers: http://code.google.com/p/protobuf/ protobuf-net è un'implementazione .net: http://code.google.com/p/protobuf-net/ in base al sopra deve essere più lavoro di quanto pensassi prima. Vorrei una versione win32 o non .net in Delphi. –

risposta

9

Questo progetto contiene l'implementazione di buffer di protocollo per Delphi. Dal progetto è stata implementata la funzionalità limitata necessaria per un progetto specifico. A quel tempo, non ho alcun senso trasferire l'intero codice del progetto. http://sourceforge.net/projects/protobuf-delphi/

+0

e non è stato più toccato dal 2011. Vedi sotto per la risposta Fundamentals che sembra essere ancora attivamente mantenuta. –

+1

La versione 1.1 è stata rilasciata nell'aprile 2013. –

2

Potrebbe essere meglio trovare/creare un bridge C++/Delphi piuttosto che riutilizzare i buffer del protocollo. Il codebase è piuttosto grande.

0

Mi chiedo che cosa pensi dell'uso di JSON o BSON come un lavoro in corso) come un protocollo.

+0

Sembra che i buffer di protocollo siano più ricchi di funzionalità poiché consentono ad esempio elementi facoltativi, quindi è più vicino a un protocollo XML + XSD/WSDL/SOAP che a un formato di serializzazione – mjn

14

Qui:

Fundamentals buffer protocollo 4.00.01 (10 Feb 2013)

Google buffer protocollo

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

+2

Sembra essere attivamente mantenuto. +1 per questo mentre la risposta accettata sembra essere congelata e mai toccata dal 2011. –

1

ho trovato another one sul github. (sviluppato da febbraio 2014 a luglio 2016, da giugno 2017)

Sembra che abbia preliminary proto3 support.

Non ho ancora testato, ma potrebbe essere il migliore fino ad oggi.

https://github.com/stijnsanders/DelphiProtocolBuffer

EDIT: ho provato questo, ma sembra essere scritto in Delphi vecchio e non unicode pronto.

ho potuto compilare il generatore (utilizzando 10 Seattle), ma exe compilato non sono riuscito a generare il file pas :-(

EDIT2:

Il generatore di codice funziona solo sostituendo TStream a TStreamReader/Writer . ho confermato generatore in grado di convertire recente 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 
Problemi correlati