Closed yourlife-mylife closed 1 year ago
你修改的地方不是在#ifndef _WIN32里么?好像不影响windows啊。
你修改的地方不是在#ifndef _WIN32里么?好像不影响windows啊。
感谢你的PR! 这里非Windows下的意思是:
#ifndef _WIN32
if (parse_origin(argc, argv, params, idl_type) == 0) // 如果解析暂时没有出错
{
if (parse_getopt(argc, (char * const *)argv, params, idl_type) != 0) // 就继续尝试做类getopt格式的解析
return 0;
}
#else
parse_origin(argc, argv, params, idl_type); // 直接做最基本格式的解析
#endif
// 无论哪种平台,如果解析不出来out_dir(也就是输出目录)或者idl_file(也就是proto文件)
if (params.out_dir == NULL || params.idl_file.empty())
{
fprintf(stderr, SRPC_GENERATOR_USAGE, argv[0]); // 就退出
return 0; // 84行
}
因为srpc_generator支持两类格式:
所以这个parse_origin()
是用来解析简单格式的。
麻烦再帮确认下,windows的错误是在84行返回的么?
你修改的地方不是在#ifndef _WIN32里么?好像不影响windows啊。
ifndef _WIN32是指在非windows里面如果执行第一个if语句执行后接着执行if (parse_getopt(argc, (char const )argv, params, idl_type) != 0),所以Linux里面会校正过来,但是windows里面就直接return 0了
感谢你的PR! 这里非Windows下的意思是:
#ifndef _WIN32 if (parse_origin(argc, argv, params, idl_type) == 0) // 如果解析暂时没有出错 { if (parse_getopt(argc, (char * const *)argv, params, idl_type) != 0) // 就继续尝试做类getopt格式的解析 return 0; } #else parse_origin(argc, argv, params, idl_type); // 直接做最基本格式的解析 #endif // 无论哪种平台,如果解析不出来out_dir(也就是输出目录)或者idl_file(也就是proto文件) if (params.out_dir == NULL || params.idl_file.empty()) { fprintf(stderr, SRPC_GENERATOR_USAGE, argv[0]); // 就退出 return 0; // 84行 }
因为srpc_generator支持两类格式:
- 简单格式:srpc_genertor protobuf demo.proto ./some_dir/
- 类getopt格式(windows下不支持):srpc_genertor -i demo.proto -o ./some_dir/ 所以这个
parse_origin()
是用来解析简单格式的。麻烦再帮确认下,windows的错误是在84行返回的么?
不好意思,是我的疏忽,其实是因为我本地的代码不是最新的,我刚刚看了最新代码,这个问题是已经处理过了的
好的哈!windows下如果发现什么问题欢迎随时帮跟进!
你修改的地方不是在#ifndef _WIN32里么?好像不影响windows啊。
ifndef _WIN32是指在非windows里面如果执行第一个if语句执行后接着执行if (parse_getopt(argc, (char const )argv, params, idl_type) != 0),所以Linux里面会校正过来,但是windows里面就直接return 0了
这是以前版本的问题,我刚看到最新代码已经解决了,不好意思
在windows中使用时,srpc_generator不能自动生成文件。是因parse_origin函数返回0时表示参数解析成功,要使程序能继续往下执行,需要将if语句中的“==”改成“!=”。