在Symbian上应用gSoap

    技术2022-05-20  33

    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了。


    最新回复(0)