gsoap 学习 1-由wsdl文件生成h头文件
开始前先看一下用户向导吧 http://www.cs.fsu.edu/~engelen/soap.html 中左侧点击Documentation
英语水平确实有限,有些内容可能说的不准确,敬请参考向导中原文,以免误导
向导 1.1节中提供了gSoap开发包的下载地址http://sourceforge.net/projects/gsoap2
下载最新gSoap程序包
解压后在\gsoap\bin\win32(windowsXP下,其它操作系统就自己选择)下找到 编译器soapcpp2.exe 和wsdl解析工具 wsdl2h.exe,这两个文件也可以重新编译生成,用户向导中有介绍,此处就不多说,用现成的了。
进入主题:开发客户端程序
(1)客户端服务端通信必不可少的一个东西:接口定义。
gSoap使用中,需要此接口文件(也就是以后常提到的头文件)此文件可以两种方式得到:
1: 由现有的wsdl文件转换得到(本文使用这种方式)
2: 自己编写
(2)两个工具的用途
wsdl2h.exe--------名字就能看出来,完成 wsdl文件(.wsdl)到(2)头文件(.h)的转换,即由写好的wsdl格式的接口定义文件转换为C/C++格式的头文件
soapcpp2.exe------根据接口头文件生成应用程序客户端和服务端的框架文件(soapClient.cpp、soapServer.cpp等).
结合例子说明过程
示例:引用向导中的例子--计算器
由wsdl文件生成接口头文件
wsdl文件URL地址:http://www.cs.fsu.edu/~engelen/calc.wsdl
操作流程
a) 程序->运行 输入cmd 启动命令行;
b) 打开wsdl2h.exe所在文件路径(不打开的话下面输入时要记着输入全路径,不然找不着了);
c) 输入:wsdl2h.exe -o cal.h http://www.cs.fsu.edu/~engelen/calc.wsdl,
其中
"wsdl2h.exe",因为第二步中打了wsdl2h文件所在路径,所以此处可以直接用了,若没打开要输入所在完整路径
"cal.h"为生成的头文件名,此文件的保存位置在wsdl2h.exe同一文件目录下(要修改的话要请参照命令行语法规则,此处不多说了,有点脱离主题)
"-o"是生成选项,表示输出,也可以增加其它选项(向导中出现 "-s -o"、"-c -o"等),具体选项说明请参照向导中介绍。
"http://www.cs.fsu.edu/~engelen/calc.wsdl"是wsdl文件的位置,此处是在网络地址(这个地址是可以用的),如果wsdl文件在本地的也可以,路径设置好就OK了
注意:以上四项中每项间都有空格分开 不要手误啊!
d) 回车 运行吧,看提示信息,没有提示故障的话,查找cal.h吧(cal.h的保存路径要记好啊,自己设置的);
e) 得到cal.h后,打开可以看到接口定义;
f) 在命令行中 输入:soapcpp2.exe cal.h
其中
"soapcpp2.exe",此处把soapcpp2.exe和wsdl2h.exe放在同一目录下了,且前面已打开此路径;
"cal.h"即由wsdl生成的头文件,此文件保存位置与soapcpp2.exe相同,故此处可这样输入,若不同还须设置文件路径;
同样两项之间也有空格!
可以增加控制选项如"soapcpp2.exe -C cal.h"则只生成客户端所需文件, "soapcpp2.exe -S calc.h"则只生成服务端所需文件
g) 回车 运行。
如果提示找不到文件 stlvector.h,因为cal.h文件中引用了文件stlvector.h;解决方法:开发包\gsoap\import目下有此文件,复制一份到cal.h所在目录。
注意:此过程中要检查生成的编译信息,确保没有警告信息出现(警告信息可能是gSoap不支持的内容,如果不去除,程序运行故障很难找到根本原因),另不能只看编译结果成功就认为是正确的,存在警告信息也显示为编译成功!!
h) 编译成功,生成的框架文件保存位置与cal.h在同一目录下,包括:calc.nsmap、soapC.cpp、soapcalcObject.h、soapcalcProxy.h、soapClient.cpp、soapClient.lib
、soapH.h、soapServer.cpp、soapServer.Lib、soapStub.h和接口的请求应答xml文件。
其中
calc.nsmap 为命名空间定义文件;
soapClient.cpp 客户端文件
soapServer.cpp 服务端文件
soapcalcProxy.h 代理用到
soapStub.h 此文件中为程序中要用到的接口的声明(将cal.h中的接口经过处理后,在程序中供调用的接口)
xml文件 为接口的xml格式,可以据此帮助调试等。。。
其它文件作用还没完全搞明白,向导中有说明,此处不说了以免误导^_^
i) 编译过程完成。下面开始程序(客户端)
VC6中新建空的win32控制台工程,新建源文件calcClient.cpp;
复制编译生成的文件(包括cal.h和stlvector)到程序目录中;
在工程中添加文件calc.nsmap、soapC.cpp、soapClient.cpp、soapH.h、soapStub.h(使用代理添加soapcalcProxy.h);
编译,提示无法找到文件stdsoap2.h、stdsoap2.cpp文件,这两个文件为gSoap的源码文件,在\gsoap文件夹中找到这两个文件,复制到程序目录下并添加到工程中;
在calcClient.cpp文件中 添加语句#include "soapH.h", #include "calc.nsmap"
///calcClient.cpp源码//
#include <stdio.h>
#include "soapH.h"
#include "calc.nsmap"
const char server[] = "http://websrv.cs.fsu.edu/~engelen/calcserver.cgi";
int main(int argc, char **argv)
{
struct soap soap;
double a, b, result;
if (argc < 4)
{ fprintf(stderr, "Usage: [add|sub|mul|div|pow] num num\n");
exit(0);
}
soap_init(&soap);
a = strtod(argv[2], NULL);
b = strtod(argv[3], NULL);
switch (*argv[1])
{ case 'a':
soap_call_ns2__add(&soap, server, "", a, b, result);
break;
case 's':
soap_call_ns2__sub(&soap, server, "", a, b, result);
break;
case 'm':
soap_call_ns2__mul(&soap, server, "", a, b, result);
break;
case 'd':
soap_call_ns2__div(&soap, server, "", a, b, result);
break;
case 'p':
soap_call_ns2__pow(&soap, server, "", a, b, result);
break;
default:
fprintf(stderr, "Unknown command\n");
exit(0);
}
if (soap.error)
{ soap_print_fault(&soap, stderr);
exit(1);
}
else
printf("result = %g\n", result);
soap_destroy(&soap);
soap_end(&soap);
soap_done(&soap);
return 0;
}
//calcClient.cpp源码
其中soap_call_ns2__add、soap_call_ns2__sub、soap_call_ns2__mul、soap_call_ns2__div、soap_call_ns2__pow为接口函数,在soapStub.h中可以找到函数声明。
^_^搞定一步^_^
calcClient.cpp内容引用了gSoap开发包中例程中calc的源码,函数名略有修改动!代码中没有做接口执行故障检测,仅供参考。
这个例子中还有很多东西没写明白,比如gSoap中接口函数的定义的原则、gSoap的初始化和结束清理等。
gsoap 学习 1-由wsdl文件生成h头文件相关推荐
- python读xml文件生成.h头文件_PYTHON读写xml文件的方法
要生成的xml文件格式如下: [python] sample xml thing ma xiaoju Springs Widgets, Inc. First I think widgets are g ...
- python读xml文件生成.h头文件_Python创建xml文件示例
Python创建xml文件示例 这里有新鲜出炉的 Python 入门,程序狗速度看过来! Python 编程语言 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido van Ros ...
- hpp头文件和h头文件
详解:C++ hpp头文件与h头文件-C++ hpp文件-嗨客网 个人见解: hpp只是为了让人知道这个文件声明和定义都在同一个文件,仅此而已.至于上面文章说的增加cpp和编译次数 1.完全可以用.h ...
- Android JNI开发生成.h头文件问题(转)
在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...
- java生成.h头文件_javah头文件生成器
javah头文件生成器 javah程序创建C头文件和存根文件,这些是把本地C成员函数包入java 所需要的.被创建的头文件给出了有关java类的信息,这些信息是C成员函数与java类交换数据所必需的. ...
- hpp头文件与h头文件的区别
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译.而实现代码将直接 ...
- c语言cstdio头文件,从cstdio与stdio.h浅析加c头文件与.h头文件的区别
加C头文件是C++为了兼容纯C语法而对.h文件进行了处理,例如cstdio // cstdio standard header #pragma once #ifndef _CSTDIO_ #defin ...
- c语言中的stdbool.h头文件,【C语言】中的stdbool.h头文件
C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...
- gsoap 学习 1-自己定义接口生成头文件
接口头文件的格式在向导中没有看到明确的说明性的内容,但通过看开发包中示例程序中头文件定义和通过wsdl生成的头文件的内容,可以发现,头文件中都会出现以下几行信息 //gsoap ns service ...
最新文章
- C++中拷贝控制操作(三/五法则)
- EXCEL自定义的应用
- UESTC 2015dp专题 E 菲波拉契数制 dp
- 2018-1-8 Linux学习笔记
- NR 5G 安全与秘钥简述
- Js中的callback机制
- 从Zygote孵化frameworks进程,分析StartActivity流程中intent传递数据的最大值。
- GET与POST传递数据的最大长度能够达到多少
- Flutter 开发应用第一个页面
- Codeforces Round #177 (Div. 1)C. Polo the Penguin and XOR operation【贪心】
- nvm use切换node版本,但是切换后没有*号
- 无平行文本照样破解密码,CipherGAN有望提升机器翻译水平
- 蓝桥杯 ADV-100 算法提高 第二大整数
- ACM ICPC 历年真题和资源
- nginx+tomcat+msm实现seesion共享
- aes离线解密工具_AES-加密解密工具类
- 如何提高淘宝新店店铺关注量方法技巧
- linux下将8bit二值位图转化为1bit单色位图【C/C++】
- 浅谈ElasticSearch
- 微信小程序API 文件·文件管理器