20

DelphiでGoogleProtocolBuffersを実装するプロジェクトを知っている人はいますか?

4

5 に答える 5

18

ここ:

Fundamentals Protocol Buffers 4.00.01 (2013 年 2 月 10 日)

Google プロトコル バッファ

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

于 2013-02-21T09:04:26.367 に答える
10

このプロジェクトには、Delphi のプロトコル バッファの実装が含まれています。プロジェクトから、特定のプロジェクトに必要な限られた機能が実装されました。その時点で、プロジェクト コード全体を転送する意味がありません。 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

編集: これをテストしましたが、古いデルファイで書かれており、ユニコードに対応していないようです。

(10 Seattle を使用して) ジェネレーターをコンパイルできましたが、コンパイルされた 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
于 2017-06-06T08:06:26.420 に答える
-1

JSONまたはBSONのいずれかをプロトコルとして使用することについて、どう思われますか?

于 2011-03-17T04:00:46.500 に答える