有谁知道在 Delphi 中执行 Google Protocol Buffers 的项目?
问问题
6954 次
5 回答
18
于 2013-02-21T09:04:26.367 回答
10
该项目包含 Delphi 的 Protocol Buffers 的实现。从项目中实现了特定项目所需的有限功能。那时,我觉得转移整个项目代码没有任何意义。 http://sourceforge.net/projects/protobuf-delphi/
于 2011-11-22T12:12:26.760 回答
2
您最好找到/制作一个 C++/Delphi 桥,而不是重新实现协议缓冲区。代码库相当大。
于 2010-02-03T00:07:33.580 回答
1
我在 github 上找到了另一个。(2014 年 2 月至 2016 年 7 月开发,截至 2017 年 6 月)
它似乎有初步的 proto3 支持。
我还没有测试,但它可能是今天最好的。
https://github.com/stijnsanders/DelphiProtocolBuffer
编辑: 我对此进行了测试,但它似乎是用旧的 delphi 编写的,并且没有准备好 unicode。
我可以编译生成器(使用 10 Seattle),但编译后的 exe 无法生成 pas 文件:-(
编辑2:
代码生成器只是将 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
于 2017-06-06T08:06:26.420 回答