根据我多年前阅读此帖子的理解,有人曾使用协议缓冲区与Codegear C ++ Builder 2007一起工作
https://groups.google.com/forum/?fromgroups=#!topic/protobuf/YapO_DqFVvc
以上Builder 2007版protobuf的作者将其上传到第三方URL,但是它的链接似乎已经很久了,并且根据讨论和Protocol Buffers 2.5.0的当前状态判断修复/改变从未从protobuf分叉或合并到主干。
更新
当使用protoc.exe(2.5.0)生成的代码中的任何一个示例.proto文件时,C ++ Builder 2007会抱怨许多问题,包括google :: internal命名空间中名称的“重复条目”(例如{ {1}} - 它还会抱怨基于google::internal::kEmptyString
的容器,std::hash
是一个无法识别的符号。
答案 0 :(得分:1)
我花了几天时间才找到解决方案,但是这就是我如何在Codegear 2007中使用它的方法:
获取protobuf https://github.com/saadware/protobuf-cppbuilder的C ++ Builder版本 - 这基于2.4.1,所以它有点过时了,但我猜可以将C ++构建器更改合并到2.5中。 0(或任何最新版本)。 protobuf的C ++ Builder版本适用于Builder 2009,但它修复了std::hash
的各种问题,因此它比Google的发布更好。
获取.cc
文件夹中以下./src/google/protobuf
个文件的副本,并将其更改为.cpp
扩展名。 .cbproj
格式似乎存在问题,它不喜欢.cc
(您需要将所有这些文件添加到Codegear 2007 .cbproj中 - 这些是libprotobuf-lite所需的文件)。
extension_set.cpp
generated_message_util.cpp
message_lite.cpp
repeated_field.cpp
wire_format_lite.cpp
stubs\common.cpp
stubs\once.cpp
io\coded_stream.cpp
io\zero_copy_stream.cpp
io\zero_copy_stream_impl_lite.cpp
根据'Dazza'的主题,使用文件中的查找和替换(例如Notepad ++)重命名google :: internal命名空间。请注意,需要区分大小写的查找/替换,因为存在名称“内部”用于其他事项的情况。对于这一步,我遵循Dazza建议将其更改为google::internals
。 (注意 - 这是libprotobuf-lite和用于生成代码的字符串)
在生成的代码字符串中,搜索所有出现的memset
并将其更改为std::memset
(这主要用于代码生成器库; libprotoc
。这样做,每次重新生成.proto绑定时,C ++构建器将无法识别memset
。
使用Visual Studio构建protoc.exe(我无法在Builder中构建Protoc.exe,但这无论如何都不重要,代码生成器只需要构建一次)
< / LI>修改示例.proto文件使用lite运行时;
option optimise_for = LITE_RUNTIME
。注意 - 打开此选项时无法使用反射功能。
使用protoc.exe
在.proto文件上运行--cpp_out
。输出文件的扩展名为.cc
- 您需要将其重命名为.cpp
将生成的文件添加到项目中并进行构建。
(注意 - 仍然有一些警告未完成 - 一个抱怨多余的&
获取一个函数的地址,还有一些抱怨签名/未签名的比较 - 但至少它构建并且似乎工作)