2010-01-27 3 views
17

누구든지 델파이에서 Google 프로토콜 버퍼 구현을 수행하는 프로젝트를 알고 있습니까?델파이 프로토콜 버퍼?

+0

하드 나 자신 그것을 갈을 가지고 있다고 보지 않는다 (자신을?), 그것은 단지 시간 (시간!)의 난이 있었으면 좋겠다 하루에 몇 시간 더. –

+2

아멘! 도우 려하고 처음부터 시작하지 않기를 바랬습니다. –

+1

프로토콜 버퍼 사이트 : http://code.google.com/p/protobuf/ protobuf-net은 .net 구현입니다. http://code.google.com/p/protobuf-net/ 내가 처음 생각한 것보다 더 많은 일을해야합니다. 델파이에서 win32 또는 비 .net 버전을 사용하고 싶습니다. –

답변

9

이 프로젝트에는 Delphi 용 프로토콜 버퍼 구현이 포함되어 있습니다. 프로젝트에서 특정 프로젝트에 필요한 제한된 기능이 구현되었습니다. 그 당시에는 전체 프로젝트 코드를 전송할 생각이 없습니다. 여기 http://sourceforge.net/projects/protobuf-delphi/

+0

보다 XML + XSD/WSDL/SOAP 프로토콜에 더 가깝습니다. 2011 년부터 다시 다루지 않았습니다. 아래를 참조하십시오. 여전히 적극적으로 유지 관리되는 것으로 보이는 기본 답변 때문입니다. –

+1

버전 1.1은 2013 년 4 월에 출시되었습니다. –

2

프로토콜 버퍼를 다시 구현하는 대신 C++/Delphi 브리지를 찾는 것이 더 나을 것입니다. 코드베이스는 꽤 큽니다.

0

JSON 또는 BSON을 사용중인 것으로 생각하는 것이 프로토콜로 진행중인 것 같습니다.

+0

프로토콜 버퍼는 예를 들어 선택적 요소를 허용하기 때문에 더 많은 기능이있는 것처럼 보이므로 직렬화 형식 – mjn

14

:

기본 프로토콜 버퍼 4.00.01 (2013 2월 10일)

구글 프로토콜 버퍼는

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

+2

적극적으로 유지 관리되는 것으로 보입니다. +1은 허용 된 답변이 2011 년 이후 동결되어 표시되지 않는 것으로 나타났습니다. –

1

나는 GitHub의에 another one을 발견했다. (2017 년 6 월 현재, 2007 년 2 월 2 일부터 7 월 20 일까지 개발 됨)

preliminary proto3 support 인 것으로 보입니다.

아직 테스트하지는 않았지만 현재로서는 최고 일 수 있습니다.

https://github.com/stijnsanders/DelphiProtocolBuffer

편집 : 내가이 시험 만 준비 유니 된 델파이로 작성되지 것 같습니다.

내가 (10 시애틀 사용) 발전기를 컴파일 할 수 있지만 컴파일 된 exe 인은

EDIT2 :-(싶어서 파일을 생성 할 수 없습니다 : 코드 생성기 그냥 TStreamReader에은 TStream를 교체 작품

/라이터 . 나는 발전기 최근 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 
관련 문제