wsdl2h -s -o PhoneQuery.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
soapcpp2 -C -L -i -I E:\gSOAP\gsoap-2.8\gsoap\import -xPhoneQuery.h
其中红色部分是可变的,这个介绍的就比较多的,如果在第2步生成错误,比如缺少stlvector.h或者soap12.h的话,在第一步生成的.h文件中,注释掉相应的import语句
3把生成的文件添加到你的vs2008的工程中,分为两部分进行讲解:
第一:Console application( 不是1.2操作的结果,这个部分是单独的)
如图中的标号:
3,4为gsoap解压目录中的代码
其中3,4需要设置添加#include "stdafx.h"的一用
另外在testsoap1.cpp中需要添加如下引用:
#include "qqOnlineWebServiceSoap.nsmap" #include "soapqqOnlineWebServiceSoapProxy.h"
第二:MFC Application
如图添加1,2步骤中生成的文件和gsoap中的2,4标号的文件。
需要注意的是:
需要在引用proxy类的文件:
PhoneQueryDlg.h中添加#include "soapMobileCodeWSSoapProxy.h"的引用。
PhoneQueryDlg.cpp中添加#include "MobileCodeWSSoap.nsmap"的引用。
另外需要注意的是:MFC Application 的编码字符集,而一般的webservice采用的都是utf-8的字符集,因此在传入的时候需要把mfc applicatoin的字符转化为utf-8的格式传入。得到webservice的返回值后,把字符转化为相应的编码字符集即可。
这里有关字符转化的函数有两个:
wchar_t* CPhoneQueryDlg::GetUNICODEfromUTF(const char* des) { int wcslen = ::MultiBytetoWideChar(CP_UTF8,NULL,des,strlen(des),0); //分配空间要给'\0'留个空间,MultiBytetoWideChar不会给'\0'空间 wchar_t* result = new wchar_t[wcslen + 1]; //转换 ::MultiBytetoWideChar(CP_UTF8,result,wcslen); //最后加上'\0' result[wcslen] = '\0'; return result; } char* CPhoneQueryDlg::CStringtochar(CString des) { #ifdef _UNICODE // Unicode编码 //注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的 int n = des.GetLength(); //获取宽字节字符的大小,大小是按字节计算的 int len = WideCharToMultiByte(CP_UTF8,-1,NULL); //为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小 char * result = new char[len+1]; //以字节为单位 //宽字节编码转换成多字节编码 WideCharToMultiByte(CP_UTF8,len,NULL); return result; #else // 多字节编码 muti_byte return (LPSTR)(LPCTSTR)des; #endif }
最后希望这边文章对初学者有点帮助,任何问题请联系我。
by the way 写这篇文章结束到我接触gsoap不到12个小时。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。