FXSend/BJDX_iagw_Mms/生成方法.txt
2025-02-28 17:05:50 +08:00

89 lines
2.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

wsdl2h -o ctcc.h -s ctcc_mm_notification_service_2_2.wsdl
soapcpp2 ctcc.h -S -i
将生成的几个文件连同stdsoap2.cpp,stdsoap2.h拷到工程\ctcc\文件夹下。
将几个cpp在工程设置中为不预编译头。
生成一个类基类为soapcpp2自动生成的类。
记得要#include *.nsmap
用法:
wsdl2h -o 头文件名 WSDL文件名或URLwsdl2h常用选项
-o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码否则是C++代码
-s 不要使用STL代码
-t 文件名指定type map文件默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则比如在wsmap.dat里写
xsd__string = | std::wstring | wchar_t*那么SOAP/XML中的string将转换成std::wstring或wchar_t*,这样能更好地支持中文。
例:
wsdl2h -o ayandy.h \
-n ay -t wsmap.dat \
http://www.ayandy.com/Service.asmx?WSDL
综上所述
如果编写服务器端项目里应该加入soapServerLib.c代码里包含头文件soapH.h
如果编写客户端项目里应该加入soapClientLib.c代码里包含头文件SoapH.h或xxxxProxy.h
当然还要加入gsoap库里的stdsoap2.cpp文件如果是写C代码则加入stdsoap2.c
如果看到soapcpp2提示:”Critical error: #import: Cannot open file "stlvector.h" for reading.“, 那是因为我们的头文件使用了STL(wsdl2h 没用-s选项),这时要使用-I选项指定gSOAP的 import文件路径这个路径是"$gsoap\gsoap\import":
soapcpp2 ayandy.h -I D:\gsoap-2.7\gsoap\importsoapcpp2常用选项
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码否则是C++代码(与头文件有关)
-I 指定import路径见上文
-x 不要产生XML示例文件
-i 生成C++包装客户端为xxxxProxy.h(.cpp)服务器端为xxxxService.h(.cpp)。
//多客户端的方法
写一个wsmap.dat文件里面写上:xsd__string = | std::wstring | std::wstring*
从samples\components\cpp2拷贝env.h,fault.h,header.h到\bin下。
soapcpp2 -CS -penv env.h //生成公用类
wsdl2h -s -qADC -o ADCForSI.h -t wsmap.dat ADCInterfaceForSI.wsdl
soapcpp2 -i -n -pADC ADCForSI.h
wsdl2h -s -qSI -o SIForADC.h -t wsmap.dat SIInterfaceForADC.wsdl
soapcpp2 -i -n -pSI SIForADC.h
soapcpp2 -CS -penv env.h //生成公用类
wsdl2h -s -qIAGWMMS -o IagwMms.h -t wsmap.dat iagw_wsdl.wsdl
soapcpp2 -i -nIAGWMMS -pIAGWMMS IagwMms.h
//soapcpp2 -i -S -nIAGWMMS -pIAGWMMS IagwMms.h
#include ".\WebService\H.nsmap"
#include ".\WebService\ADC.nsmap"
#include ".\WebService\SI.nsmap"
#include ".\WebService\SISIInterfaceForADCSoapProxy.h"
#include ".\WebService\SISIInterfaceForADCSoapService.h"
#include ".\WebService\ADCADCInterfaceForSISoapProxy.h"
#include ".\WebService\ADCADCInterfaceForSISoapService.h"
stdsoap2.*,envC.*需要加入工程
对于Server生成新类继承原来的虚函数并且生成一个原来类的虚函数
char szIpAddr[32];
sprintf(szIpAddr, "%d.%d.%d.%d",
((m_soapServer.ip)>>24)&0xFF,((m_soapServer.ip)>>16)&0xFF,((m_soapServer.ip)>>8)&0xFF,(m_soapServer.ip)&0xFF);
string strIp(szIpAddr);