Qualcuno sa di un progetto per eseguire un'implementazione dei buffer del protocollo Google in Delphi?Buffer protocollo Delphi?
risposta
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/
e non è stato più toccato dal 2011. Vedi sotto per la risposta Fundamentals che sembra essere ancora attivamente mantenuta. –
La versione 1.1 è stata rilasciata nell'aprile 2013. –
Potrebbe essere meglio trovare/creare un bridge C++/Delphi piuttosto che riutilizzare i buffer del protocollo. Il codebase è piuttosto grande.
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
Qui:
Fundamentals buffer protocollo 4.00.01 (10 Feb 2013)
Google buffer protocollo
Sembra essere attivamente mantenuto. +1 per questo mentre la risposta accettata sembra essere congelata e mai toccata dal 2011. –
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
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. –
Amen! Speravo di aiutare e non iniziare da zero. –
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. –