Files
xkm-server/server_999/tools/build/csharptdr.md
root c9ce2f5432 docs(server_999): 添加 TDR 工具使用文档和连接测试文档
- 新增 csharptdr.md 文件,详细说明了 csharptdr 工具的使用方法和选项
- 新增 test_conn.md 文件,提供了连接测试工具的使用说明和示例
- 在 .gitignore 中添加了忽略项,以防止生成的文件被纳入版本控制
2025-05-26 13:17:45 +08:00

10 KiB
Raw Blame History

  • 将多个XML格式的元数据描述库转换成二进制格式、C语言定义格式描述及生成数据定义的C语言头文件。 也可以把多个XML格式的元数据描述库转换成AS3、C++、C#的类文件,这些类文件实现了打解包等接口。 如果多个xml文件之间存在依赖关系则被依赖的xml文件必须放在参数表的前面。

用法: csharptdr (-B,--xml2dr [-o,--out_file=FILE] ) | (-C,--xml2c [-o,--out_file=FILE]) | (-H,--xml2h [-p,--no_type_prefix] [-s,--add_custom_prefix=PREFIX] [-l,--no_lowercase_prefix] [-c,--no_type_declare]) [-u,--prefix_file=FILE] [-w,--with-namespace]) | (-A,--as3 [-i,--indent-size=TABSIZE]) | (-P,--xml2cpp [-i,--indent-size=TABSIZE] [--no_comm_files] [--only_comm_files] [-p,--no_type_prefix] [-s,--add_custom_prefix=PREFIX] [-l,--no_lowercase_prefix] [-c,--no_type_declare] [-u,--prefix_file=FILE] [--no_united_name] [--common_namespace=NAME] [--capital_macro_name] [--with_from_xml] [--with_to_xml] [--no_pack] [--no_unpack] [--no_visualize] [--no_macro_from_xml] [--no_macro_to_xml] [--compatible_macro_name] [--no_created_time] [--use_switch_case_style] [--no_msvc_c1061_error] | (-S,--xml2csharp [-i,--indent-size=TABSIZE] [--no_error_trace]) | (-G,--gen_xmltmplt --meta_name=NAME [-e,--meta_version=VERSION] [-x,--xml_format=formatId] [-n,--encoding=ENCODING] [-o,--out_file=FILE]) | (-T,--export_prefix --prefix_file=FILE | (-E,--errorlookup=ERRORCODE) [-O,--out_path=PATH] [-f,--old_xml_tagset] [-d,--dump_lib ] [-h,--help] [-v -version] xmlfile...

主要转换操作选项: -B,--xml2dr 指定使用将多个xml格式的元数据描述库转换成二进制个数描述库的功能(xml2dr)。 -C,--xml2c 指定使用将多个xml格式的元数据描述库转换成C语言定义格式描述库的功能(xml2c)。 -H,--xml2h 指定使用将多个xml格式的元数据描述库转换为数据的C语言头文件的功能(xml2h)。 每个xml文件会转换为一个相应头文件除文件后缀外头文件与xml文件名相同。 -A,--xml2as3 指定使用将多个xml格式的元数据描述库转换为ActionScript3语言的类文件的功能。 -P,--xml2cpp 指定使用将多个xml格式的元数据描述库转换为C++语言类文件的功能。 -S,--xml2csharp 指定使用将多个xml格式的元数据描述库转换为C#语言类文件的功能。 -G,--gen_xmltmplt 为指定元数据生成xml格式的配置文件模板(gen_xmltmplt)。 -T,--export_prefix 导出tdr生成.h文件或C++类文件时使用的数据成员前缀表到文件中。 -E,--errorlookup 根据tdr API接口返回的错误号查找具体的错误信息。

xml2dr的可选项 -o,--out_file=FILE 指定转换出来的二进制描述库的文件名如果没有指定此选择则缺省以a.tdr为文件名。

xml2c的可选项 -o,--out_file=FILE 指定转换出来的C语言定义格式描述库的文件名如果没有指定此选择则缺省以a.c为文件名。

xml2h的可选项 -p,--no_type_prefix 生成的结构体(struct)/联合体(union)成员名不添加表示此成员类型的前缀。 如果不指定此选择,缺省会添加表示成员类型的前缀。 -s,--add_custom_prefix=PREFIX 生成的结构体(struct)/联合体(union)成员名添加自定义的前缀。 PREFIX为要添加的前缀串目前其最多只能包含8个字符。 -l,--no_lowercase_prefix 如果指定此选项,则生成的结构体(struct)/联合体(union)成员名不强制将首字母改成小写。 -c,--no_type_declare 如果指定了此选项则在元数据的C语句头文件中不生成结构体(struct)/联合体(union)的类型声明。 -u,--prefix_file=FILE 如果指定了此选项则使用文件FILE中的前缀规则生成C语言头文件的数据成员前缀。 注意,如果指定了此选项,其他关于前缀的选项均被设置为无效。 -w,--with-namespace 如果指定此选项则在生成的头文件中加入namespace(其值为metalib的name属性的值)。

xml2as3的可选项 -i,--indent-size 指定生成的ActionScript3类文件的缩进大小(必须大于0),默认为 4 个空格。

xml2cpp的可选项(同时支持所有xml2h的可选项, -w选项除外) -i,--indent-size 指定生成的c++类文件的缩进大小(必须大于0),默认为 4 个空格。 --no_comm_files 如果指定了此选项则不生成与协议无关的、公用的C++类文件。 --only_comm_files 如果指定了此选项则只生成与协议无关的、公用C++类文件, 此时不需要指定xml描述文件。 --no_united_name 如果指定了此选项,根节点的 name 属性值为 "" 的xml描述文件, 生成的代码不指定namespace。 --common_namespace=NAME 如果指定了此选项则生成的common文件的namespace为NAME否则采用默认值"tsf4g_tdr"。 --capital_macro_name 如果指定了此选项则生成的C++头文件中防止重复包含的预定义宏采用全大写。 --with_from_xml 如果指定了此选则生成输入XML格式数据的成员函数及相关的第三方源代码。 --with_to_xml 如果指定了此选则生成输出XML格式数据的成员函数。 --no_pack 如果指定了此选则不生成 pack 成员函数。 --no_unpack 如果指定了此选则不生成 unpack 成员函数。 --no_visualize 如果指定了此选项则不生成visualize成员函数, 默认生成visualize成员函数。 --no_macro_from_xml 如果指定了此选项则加载xml格式数据时不支持整数类型配置成macro名默认支持。 --no_macro_to_xml 如果指定了此选项则输出xml格式数据时绑定了macrosgroup的类型以数值输出, 默认以macro名输出。 --compatible_macro_name 如果指定了此选项则生成的C++代码的头文件中的宏名和枚举名与--xml2h方式一致默认不一致。 --no_created_time 如果指定了此选项则生成的所有文件中不输出时间注释信息,默认输出时间注释。 --use_switch_case_style 如果指定了此选项则生成的union方法使用switch case风格分支处理语句默认if else风格。 --no_msvc_c1061_error 如果出现了MSVC的C1061(blocks netsted too deeply)编译错误,请务必打开此选项。 --with_tlog_util 如果指定了此选项并且未指定--no_comm_files则生成与协议无关的、公共的tlog辅助文件。

xml2csharp的可选项 -i,--indent-size 指定生成的c++类文件的缩进大小(必须大于0),默认为 4 个空格。 -p,--no_type_prefix 生成的类成员名不添加表示此成员类型的前缀。 如果不指定此选择,缺省会添加表示成员类型的前缀。 --no_error_trace 如果指定了此选项则生成的C#类文件中不插入用于跟踪错误的调试代码。

gen_xmltmplt的必选项 -m,--meta_name=NAME 指定要生成模板的元数据名称。

gen_xmltmplt的可选项 -e,--meta_version=VERSION 如果指定此选项,则只输出版本号小于或等于此值的元数据或子成员数据。 VERSION必须大于元数据的基础版本且小于TDR支持的最大版本(2147483647)。 如果没有指定此选项或指定的值为0则取指定元数据的最大版本值。 -x,--xml_formatID=FORMATID 指定生成的xml文件的格式, 目前支持如下格式: ATTR: 简单非数组成员以属性方式输出。 LIST: 简单非数组成员以子节点方式输出。 如果没有指定 -x 选项,则缺省输出格式为 LIST。 -n,--encoding=ENCODING 指定输出的xml模板文件的头部的 encoding 属性的值。 如果没有指定 -n 选项,则缺省输出 encoding="GBK"。 -o,--out_file=FILE 指定生成的配置文件如果没有指定此选择则缺省以a.xml为文件名。

export_prefix的必选项 -u,--prefix_file=FILE 指定用于保存导出的数据成员前缀表的文件名。

转换公共选项: -O,--out_path=PATH 指定输出文件的保存路径。 如果不指定此选项: 对于xml2dr和xml2c其输出目录缺省为当前工作目录; 对于xml2h其输出目录为对应xml所在目录。 -f,--old_xml_tagset 指明xml元数据描述库是采用FO定义的老的XML标签进行描述的转换工具必须按照老的格式去解析。 如果没有指定此选项则转换工具会按照TDR定义的xml标签去解析xml元数据描述库。 -d,--dump_lib 以可视化的方式打印出元数据描述库,并输出到"dump_lib.txt"文件中。

其他选项: -h,--help 输出此工具的帮助列表 -v,--version 输出此工具的构建版本

使用示例: ./csharptdr -B -o ov_res.tdr ov_res.xml #xml格式元数据库生成.tdr二进制库 ./csharptdr -C -o ov_res.c --old_xml_tagset ov_res.xml #使用老标签集的xml格式元数据库生成.c文件 ./csharptdr -H -O "include" --add_custom_prefix="m_" --no_type_prefix net_protocol.xml #xml元数据库生成.h文件生成的文件保存在include目录 #结构体(struct)/联合体(union)成员名添加前缀"m_",但不添加类型前缀 ./csharptdr -G -m Pkg -x ATTR -o Pkg.xml net_protocol.xml #为Pkg生成xml格式的配置文件, 剪切版本为Pkg的最大版本 文件名为Pkg.xml ./csharptdr -T -u prefixfile #导出生成.h文件时使用的数据成员前缀表到文件prefixfile中 ./csharptdr -A --indent-size=8 net_protocol.xml #根据net_protocol.xml中描述的协议生成ActionScript3语言的类文件缩进大小为8个空格 ./csharptdr -P --indent-size=8 net_protocol.xml #根据net_protocol.xml中描述的协议生成C++语言的类文件缩进大小为8个空格 ./csharptdr -S --indent-size=8 net_protocol.xml #根据net_protocol.xml中描述的协议生成C#语言的类文件缩进大小为8个空格 ./csharptdr -E 0x83010404 #查询错误号0x83010404对应的错误信息