几年前在vc6下用gSoap 实现了webservice调用,特别是生成代理类,感觉非常方便。现在想在QT5下也用gSoap。出现了两个小问题,折腾了好几天,终于搞定。
首先用wsdl2h和soapcpp2生成源文件就不用说了,网上方法很多。
遇到的问题一是编译,将gsoap源文件加入工程后,编译出现一大堆错误。不要慌,先在.pro里加一句:LIBS += D:\Qt\Qt5.9.7\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a,大部分错误就没有了。只剩下stdsoap2.cpp中的namespaces了,网上有不少方法,比较麻烦,没有采用,只须在stdsoap2.h中 #ifdef _WIN32后加上一句,
# define WITH_NONAMESPACES
或者,在stdsoap2.cpp 前面包含名称空间文件xxxxSoap.nsmap
#include "WeatherWSSoap.nsmap"
这应该是正解。
编译就顺利通过了。其实,gSoap的可移植性非常强,各种平台各种环境都已经充分考虑到了,只是我们还不太会用罢了。
问题二是汉字编码问题,折腾了半天,最后我只是在soapWeatherWSSoapProxy.cpp文件中修改代理类初始化函数WeatherWSSoapProxy::WeatherWSSoapProxy_init,在开始处加上一句:soap_set_mode(this, SOAP_C_UTFSTRING); QString很强大,fromUtf8()和toUtf8(),中文问题就轻松解决了。
通过对http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl的测试,没有问题。
全部工程源码可以下载:https://download.csdn.net/download/happy_tom/12000359