gsoap 最新版本生成的代码与我们使用的版本不同

gsoap latest version generates different code than the version we use

我们正在将 gsoap 版本从 2.7.8 升级到最新版本 2.8.33

当我们的 make 文件 运行s soapcpp2.exe 和 wsdl2h.exe 具有完全相同的标志时,我没有得到完全相同的 类 和 API,所以我想我必须稍微调整一下。

我们曾经 运行 soapcpp2.exe 使用这些标志:-C -L -x -I

第一个明显的变化是 类 从 structs soap 继承而不是指向它们。我能够通过添加 -j.

来解决这个兼容性问题

现在,我遇到了另一个不兼容问题,其中一个函数

SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request(struct soap *soap)

不存在。

我搜索了 gsoap 代码并找到了它,所以我想有一些方法可以让 gsoap 生成它。真的有办法让 gsoap 生成这个函数,还是我必须调整我的代码/自己编写函数

gsoap 工具有支持向后兼容的选项。 运行 soapcpp2 -h 查看您的选项:

Usage: soapcpp2 [-0|-1|-2] [-C|-S] [-T] [-Ecdt] [-L] [-a] [-A] [-b] [-c|-c++|-c++11] [-d path] [-e] [-f N] [-h] [-i] [-I path:path:...] [-l] [-m] [-n] [-p name] [-Q name] [-q name] [-r] [-s] [-t] [-u] [-v] [-w] [-x] [-y] [-z#] [infile]
...
...
-z1 compatibility: generate old-style C++ service proxies and objects
-z2 compatibility with 2.7.x: omit XML output for NULL pointers
-z3 compatibility with 2.8.30 and earlier: _param_N is indexed globally

尝试-z1

PS。带有选项 -z1 的旧代理和服务 类 更加简单,带有选项 -j 的新代理和服务 类 是一个改进。但是,当您使用 -j 生成服务 类 时,具有全局功能的类 C API 消失了(IMO 是件好事)。