Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Подключение протобафов(Protobuf)

  • Автор темы Автор темы ATAMOS
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
4 Апр 2024
Сообщения
28
Реакции
1
В общем на входе:

На выходе:
Просто безумное количество синтактических ошибок. При чем там в инструкции сказано удалить кое-какие .proto файлы дотовские, которые требуются т.е. к синтаксическим ошибкам добавляются фэйлы с открытием файлом, когда я например обращаюсь к дотовскому econ_gcmessages.pb.h, чтобы использовать CMsgClientToGCEquipItems т.к. этот хедер тянет за собой все те файлы, которые нужно удалить.

Тут я ничего не удалял, все скомпилированные файлики .proto по доте были заинклюжены:
1717091022142.png

1717091690796.png


Тут я уже удалил(т.е. сделал по инструкции) и добавились фэйлы открытия этих файлов:
1717091088193.png



Настройки(сорян за радикал, я на форум могу грузить только 3 картинки):
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
ну ваще ты можешь компилить только то что тебе надо.
открываешь .proto файл и смотришь депенды и их депенды
например если мне нужен econ_gcmessages.proto то я открываю его смотрю а там
import "steammessages.proto";
import "econ_shared_enums.proto";
import "gcsdk_gcmessages.proto";
import "base_gcmessages.proto";
открываю каждый из этих файликов и у них тоже депенды смотрю
в итоге все депенды + сам файл:
steammessages
econ_shared_enums
gcsdk_gcmessages
base_gcmessages
steammessages_steamlearn.steamworkssdk
steammessages_unified_base.steamworkssdk
econ_gcmessages
компилишь все эти файлы инклюдишь у себя хедер нужный(econ_gcmessages.pb.h) добавляешь в проект все эти .pb.cc файлы и радуешься.
C++:
Expand Collapse Copy
#pragma comment(lib, "libprotobuf.lib")
#include <iostream>
#include <econ_gcmessages.pb.h>
#include <google/protobuf/text_format.h>
std::string MessageToString(const google::protobuf::Message& msg)
{
    std::string MessageDump{};
    google::protobuf::TextFormat::PrintToString(msg, &MessageDump);
    return MessageDump;
}

int main()
{
    CMsgClientToGCEquipItems shit{};
    shit.add_equips()->set_item_id(123);
    shit.add_equips()->set_item_id(456);
    std::cout << MessageToString(shit);
}
1717093982942.png
 
ну ваще ты можешь компилить только то что тебе надо.
открываешь .proto файл и смотришь депенды и их депенды
например если мне нужен econ_gcmessages.proto то я открываю его смотрю а там
import "steammessages.proto";
import "econ_shared_enums.proto";
import "gcsdk_gcmessages.proto";
import "base_gcmessages.proto";
открываю каждый из этих файликов и у них тоже депенды смотрю
в итоге все депенды + сам файл:
steammessages
econ_shared_enums
gcsdk_gcmessages
base_gcmessages
steammessages_steamlearn.steamworkssdk
steammessages_unified_base.steamworkssdk
econ_gcmessages
компилишь все эти файлы инклюдишь у себя хедер нужный(econ_gcmessages.pb.h) добавляешь в проект все эти .pb.cc файлы и радуешься.
C++:
Expand Collapse Copy
#pragma comment(lib, "libprotobuf.lib")
#include <iostream>
#include <econ_gcmessages.pb.h>
#include <google/protobuf/text_format.h>
std::string MessageToString(const google::protobuf::Message& msg)
{
    std::string MessageDump{};
    google::protobuf::TextFormat::PrintToString(msg, &MessageDump);
    return MessageDump;
}

int main()
{
    CMsgClientToGCEquipItems shit{};
    shit.add_equips()->set_item_id(123);
    shit.add_equips()->set_item_id(456);
    std::cout << MessageToString(shit);
}
Посмотреть вложение 277904
Ну вроде без изменений.
1717097430581.png

1717097457725.png
 
мб версия языка у тебя не та или что-то типо того?
и лучше лог билда скидывай а не скрин ошибок этих
ты сурсы протобафа в проект закинул?
Что я только уже куда не закидывал.
Стандарты языка тоже крутил, все так же.
1717101408103.png
 
завтра тестовый проект могу попробовать сделать и скинуть если не разберешься
Это было бы прекрасно.
А в чем прикол наличия этой папки google в raw до компиляции? Ее .bat'ник вообще не трогает же
1717103566637.png
 
Проблема была в том, что я определил алиасы u64,u32 и на них заагрились такие же алиасы из сурсов.
А еще descriptor.pb.h(дотавский протобаф) конфликтует с какой-то фигней из сурсов, я его исключил, пока все работает.
 
Самый мем, что даже если ты проток подключишь, тебе его апдейтить постоянно придется.
Так-то ты без него можешь обойтись, просто сам нужные классы опиши. Тебе весь прото не нужен.
 
any one has anything related to this post pelase ?
something along these lines
Код:
Expand Collapse Copy
# as apparent by the string xref in engine2.dll "U:\thirdpartycode\nonredist\protobuf\protobuf-3.21.8\src\google\protobuf\message.cc"
# dota 2 uses protobufs 3.21.8
# https://github.com/protocolbuffers/protobuf/releases/tag/v21.8



# download libprotobuf(it serializes, deserializes and manages protobuf messages) source code, copy to project dir for convenience
workdir.set $TMP
internet.fetch "https://github.com/protocolbuffers/protobuf/releases/download/v21.8/protobuf-cpp-3.21.8.zip" > ./protobuf-cpp-3.21.8.zip
zip.extract ./protobuf-cpp-3.21.8.zip ./protobuf-cpp-3.21.8
copy ./protobuf-cpp-3.21.8/protobuf-3.21.8/src/* $MyProjectDir/protobuf/src/



# add libprotobuf sources to the build system
# see protobuf-cpp-3.21.8/protobuf-3.21.8/BUILD.bazel
build-system.add-external-include-directory "$MyProjectDir/protobuf/src"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/any.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/any.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/any_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/api.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/arena.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/arenastring.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/arenaz_sampler.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/compiler/importer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/compiler/parser.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/descriptor.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/descriptor.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/descriptor_database.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/duration.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/dynamic_message.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/empty.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/extension_set.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/extension_set_heavy.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/field_mask.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_enum_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_bases.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_reflection.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_tctable_full.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_tctable_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/implicit_weak_message.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/inlined_string_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/coded_stream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/gzip_stream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/io_win32.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/printer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/strtod.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/tokenizer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/zero_copy_stream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/map.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/map_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/message.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/message_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/parse_context.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/reflection_ops.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/repeated_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/repeated_ptr_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/service.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/source_context.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/struct.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/bytestream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/common.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/int128.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/status.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/statusor.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/stringpiece.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/stringprintf.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/structurally_valid.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/strutil.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/substitute.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/time.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/text_format.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/timestamp.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/type.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/unknown_field_set.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/delimited_message_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/field_comparator.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/field_mask_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/datapiece.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/default_value_objectwriter.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/error_listener.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/field_mask_utility.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/json_escaping.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/json_stream_parser.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/object_writer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/proto_writer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/protostream_objectsource.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/protostream_objectwriter.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/type_info.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/utility.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/json_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/message_differencer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/time_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/type_resolver_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/wire_format.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/wire_format_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/wrappers.pb.cc"



# download latest protobufs dumped from dota2's dlls by SteamDB people(https://github.com/SteamDatabase/Protobufs)
# .proto files just describe the layout of specific messages using the protobuf syntax
# copy dota2's .proto files to project dir for convenience
internet.fetch "https://github.com/SteamDatabase/Protobufs/archive/refs/heads/master.zip" > ./Protobufs-master.zip
zip.extract ./Protobufs-master.zip ./Protobufs-master
copy ./Protobufs-master/Protobufs-master/dota2/* $MyProjectDir/protobuf/msg/proto/



# parse protobuf syntax and generate corresponding c++ message structures using protoc
internet.fetch "https://github.com/protocolbuffers/protobuf/releases/download/v21.8/protoc-21.8-win64.zip" > ./protoc-21.8-win64.zip
zip.extract ./protoc-21.8-win64.zip ./protoc-21.8-win64
dir.create $MyProjectDir/protobuf/msg/compiled
for-each-file $PROTOFILE in $MyProjectDir/protobuf/msg/proto/* do:
    ./protoc-21.8-win64/bin/protoc.exe --proto_path=$MyProjectDir/protobuf/msg/proto/ --cpp_out=$MyProjectDir/protobuf/msg/compiled/ $PROTOFILE



# generated cpp files come in pairs: .h file with mostly declarations + .cc file that contains corresponding implementations
# select the protobuf files you're interested in(along with their dependencies(and their dependencies ...))
# include them where you use them, and add the corresponding .cc files to the build system
# for example we want CDOTAUserMsg_ChatMessage message which is in dota_usermessages.proto
#   which depends on:
#       networkbasetypes.proto
#           which depends on:
#               network_connection.proto
#       dota_shared_enums.proto
#       dota_commonmessages.proto
#           which depends on:
#               networkbasetypes.proto
#               which depends on:
#                   network_connection.proto
# so all together, files needed are:
#   network_connection.proto + networkbasetypes.proto + dota_commonmessages.proto + dota_shared_enums.proto + dota_usermessages.proto
build-system.add-external-include-directory "$MyProjectDir/protobuf/msg/compiled"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/network_connection.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/networkbasetypes.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/dota_commonmessages.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/dota_shared_enums.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/dota_usermessages.pb.cc"
here's a test project with everything properly added/included
Пожалуйста, авторизуйтесь для просмотра ссылки.
libprotobuf is for working with messages(implements protobuf wire format, etc.), .proto files are for describing the layout of specific messages(in the protobuf syntax), protoc is for parsing protobuf syntax and emitting corresponding c++ structures(that use libprotobuf internally)
1746102900309.png

1746102910443.png
 
@
something along these lines
Код:
Expand Collapse Copy
# as apparent by the string xref in engine2.dll "U:\thirdpartycode\nonredist\protobuf\protobuf-3.21.8\src\google\protobuf\message.cc"
# dota 2 uses protobufs 3.21.8
# https://github.com/protocolbuffers/protobuf/releases/tag/v21.8



# download libprotobuf(it serializes, deserializes and manages protobuf messages) source code, copy to project dir for convenience
workdir.set $TMP
internet.fetch "https://github.com/protocolbuffers/protobuf/releases/download/v21.8/protobuf-cpp-3.21.8.zip" > ./protobuf-cpp-3.21.8.zip
zip.extract ./protobuf-cpp-3.21.8.zip ./protobuf-cpp-3.21.8
copy ./protobuf-cpp-3.21.8/protobuf-3.21.8/src/* $MyProjectDir/protobuf/src/



# add libprotobuf sources to the build system
# see protobuf-cpp-3.21.8/protobuf-3.21.8/BUILD.bazel
build-system.add-external-include-directory "$MyProjectDir/protobuf/src"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/any.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/any.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/any_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/api.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/arena.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/arenastring.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/arenaz_sampler.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/compiler/importer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/compiler/parser.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/descriptor.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/descriptor.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/descriptor_database.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/duration.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/dynamic_message.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/empty.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/extension_set.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/extension_set_heavy.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/field_mask.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_enum_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_bases.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_reflection.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_tctable_full.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_tctable_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/generated_message_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/implicit_weak_message.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/inlined_string_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/coded_stream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/gzip_stream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/io_win32.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/printer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/strtod.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/tokenizer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/zero_copy_stream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/map.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/map_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/message.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/message_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/parse_context.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/reflection_ops.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/repeated_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/repeated_ptr_field.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/service.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/source_context.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/struct.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/bytestream.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/common.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/int128.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/status.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/statusor.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/stringpiece.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/stringprintf.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/structurally_valid.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/strutil.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/substitute.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/stubs/time.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/text_format.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/timestamp.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/type.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/unknown_field_set.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/delimited_message_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/field_comparator.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/field_mask_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/datapiece.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/default_value_objectwriter.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/error_listener.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/field_mask_utility.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/json_escaping.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/json_stream_parser.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/object_writer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/proto_writer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/protostream_objectsource.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/protostream_objectwriter.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/type_info.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/internal/utility.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/json_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/message_differencer.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/time_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/util/type_resolver_util.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/wire_format.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/wire_format_lite.cc"
build-system.add-source "$MyProjectDir/protobuf/src/google/protobuf/wrappers.pb.cc"



# download latest protobufs dumped from dota2's dlls by SteamDB people(https://github.com/SteamDatabase/Protobufs)
# .proto files just describe the layout of specific messages using the protobuf syntax
# copy dota2's .proto files to project dir for convenience
internet.fetch "https://github.com/SteamDatabase/Protobufs/archive/refs/heads/master.zip" > ./Protobufs-master.zip
zip.extract ./Protobufs-master.zip ./Protobufs-master
copy ./Protobufs-master/Protobufs-master/dota2/* $MyProjectDir/protobuf/msg/proto/



# parse protobuf syntax and generate corresponding c++ message structures using protoc
internet.fetch "https://github.com/protocolbuffers/protobuf/releases/download/v21.8/protoc-21.8-win64.zip" > ./protoc-21.8-win64.zip
zip.extract ./protoc-21.8-win64.zip ./protoc-21.8-win64
dir.create $MyProjectDir/protobuf/msg/compiled
for-each-file $PROTOFILE in $MyProjectDir/protobuf/msg/proto/* do:
    ./protoc-21.8-win64/bin/protoc.exe --proto_path=$MyProjectDir/protobuf/msg/proto/ --cpp_out=$MyProjectDir/protobuf/msg/compiled/ $PROTOFILE



# generated cpp files come in pairs: .h file with mostly declarations + .cc file that contains corresponding implementations
# select the protobuf files you're interested in(along with their dependencies(and their dependencies ...))
# include them where you use them, and add the corresponding .cc files to the build system
# for example we want CDOTAUserMsg_ChatMessage message which is in dota_usermessages.proto
# which depends on:
# networkbasetypes.proto
# which depends on:
# network_connection.proto
# dota_shared_enums.proto
# dota_commonmessages.proto
# which depends on:
# networkbasetypes.proto
# which depends on:
# network_connection.proto
# so all together, files needed are:
# network_connection.proto + networkbasetypes.proto + dota_commonmessages.proto + dota_shared_enums.proto + dota_usermessages.proto
build-system.add-external-include-directory "$MyProjectDir/protobuf/msg/compiled"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/network_connection.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/networkbasetypes.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/dota_commonmessages.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/dota_shared_enums.pb.cc"
build-system.add-source "$MyProjectDir/protobuf/msg/compiled/dota_usermessages.pb.cc"
here's a test project with everything properly added/included
Пожалуйста, авторизуйтесь для просмотра ссылки.
libprotobuf is for working with messages(implements protobuf wire format, etc.), .proto files are for describing the layout of specific messages(in the protobuf syntax), protoc is for parsing protobuf syntax and emitting corresponding c++ structures(that use libprotobuf internally)
Посмотреть вложение 305113
Посмотреть вложение 305114
thanks dude you are life saver !

but i compiled it and when i open the .exe file it automatically
closes and when i hit f5 in visual studio i get
this
1746214926571.png
 
@

thanks dude you are life saver !

but i compiled it and when i open the .exe file it automatically
closes and when i hit f5 in visual studio i get
this Посмотреть вложение 305296
that's exactly what should happen... what did you expect? the important file is the .vcxproj - the MSBuild build system script
this is just a test project to show how one might work with protobuf messages
obv you'd need to intercept the messages from netchan first; protobuf is merely a message format/protocol. it doesn't magically get you the messages themselves
 
Назад
Сверху Снизу