Symbian上gSoap
==============
官网 http://gsoap2.sourceforge.net/
版本v2.7.10
进入以下目录 gsoap/gsoap_2.7.10/gsoap-2.7/gsoap/bin/win32
Z:/win32> wsdl2h -s -o pservice.h http://192.168.0.201/uim/pservice.asmx?WSDL
其中
1、pservice.h为用户自定义头文件名称
2、网址为wsdl的地址,也可以将其保存为xml文件,直接读取本地文件如:
Z:/win32> wsdl2h -s -o pservice.h pservice.xml
可能会出现某个bat文件找不到,如果发现本地已经生成pservice.h,那此错误可以忽略
Z:/win32> soapcpp2 -CLwx pservice.h
将会生成一堆.cpp和.h文件
将soapH.h/soapStub.h/soapPServiceSoapProxy.h拷到工程的inc目录下
将soapC.cpp/soapClient.cpp拷到工程的src目录下
还有两个文件在gsoap目录下,stdsoap2.h和stdsoap2.cpp,也拷入相应目录
mmp文件中追加
SYSTEMINCLUDE Epoc32/include/libc
LIBRARY eexe.lib estlib.lib ecrt0.lib
CAPABILITY ReadUserData NetworkServices
如果编译模拟器版本,应该没有问题,如果编译GCCE版本,可能会报错,说eexe.dso找不到
可以直接把Lib中的eexe.lib Remove掉,然后是ecrt0.dso找不到,同样将ecrt0.lib去掉。
继续编译,发现有类似undefined _soap_outLONG64的错误,打开那个stdsoap2.cpp发现函数
soap_outLONG64前有个宏定义#ifndef WITH_LEAN,将这个宏去掉,把函数打开,再编译,
仍有错,发现还是宏定义#ifndef WITH_LEAN的问题,去掉大概4个宏定义后,发现编译没问
题了,可以加gsoap的操作了
头文件中加入
#include "soapPServiceSoapProxy.h"
……
class PServiceSoap;
……
PServiceSoap * iService;
源文件中加入
……
iService = new PServiceSoap();
……
if(iService){
_ns1__HelloWorldResponse resp;
_ns1__HelloWorld hw;
int ret = iService->__ns2__HelloWorld(&hw,&resp);
if(ret == SOAP_OK){
RDebug::Printf(resp.HelloWorldResult);
}
}
OK了,运行!
可以运行中发现ret返回4,SOAP_TYPE 错误
则需要打开stdsoap2.h,在大约386行,发现有# elif defined(SYMBIAN),这是Symbian的
配置项,加入# define HAVE_SSCANF,保存,再编译、运行
恭喜你,OK了。
在Symbian上应用gSoap
最新推荐文章于 2024-08-30 15:48:24 发布