初识gsoap2 及 使用qt开发gsoap程序项目文件管理

http://gsoap2.sourceforge.net/下载最新的gsoap2源码包。

通过http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html(EXP1)初步了解了gsoap2的使用方法(下属示例使用了该文章的例子)。

由于一直使用Qt做开发项目的文件管理,整理了个qt项目文件,如下:

1. 目录结构

gsoap2                    # gsoap2 开发文档根目录
│  gsoap.pri              # 引入gsoap2开发用源码文件
│  gsoap28.pro            # 根项目文件
│ 
├─bin		        # gsoap2工具链(来自于sourceforge上下载的源码包)及编译后的二进制文件
│      soapcpp2.exe
│      wsdl2h.exe
│
├─gsoap                   # gsoap2开发用源码文件所在目录(来自于sourceforge上下载的源码包)
│      .dirstamp
│      dom.c
│      dom.cpp
│      stdsoap2.c
│      stdsoap2.cpp
│      stdsoap2.h
│      typemap.dat
│
└─leaning                # gsoap2应用程序所在根目录
    │  leaning.pri       # gsoap2应用用的源码及命令头文件
    │  leaning.pro       # 应用程序管理
    ├─nsmap              # 接口定义文件所在目录
    │      add.h         # 接口文件名字必须与gsoap2项目中GSOAP_NAME值一样
    │      calc.h
    ├─add                # 服务器应用目录
    │      add.pro       # 服务器项目
    │      main.cpp      # 项目源码(来自于(EXP1)所述文档)
    ├─add_client         # 客户端应用目录
    │      add_client.pro # 客户端项目
    │      main.cpp      # 客户端源码(来自于(EXP1)所述文档)
    ├─calc
    │      calc.pro
    │      main.cpp
    ├─calc_client
           calc_client.pro
           main.cpp

其中add.cpp、add_client.cpp分别为服务端和客户端的例子程序(来自于http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html)

gsoap2应用项目需要放在learning目录下。

2. gsoap2应用程序项目

控制文件源码及项目举例,目的是为了简化应用开发的配置工作(当前仅在windows下测试过可用)。

gsoap28.pro

TEMPLATE = subdirs
SUBDIRS += leaning

gsoap.pri

INCLUDEPATH += $${PWD}/gsoap

HEADERS += $${PWD}/gsoap/stdsoap2.h

contains(CONFIG,use_c_gsoap_api) {
    SOURCES += $${PWD}/gsoap/stdsoap2.c                $${PWD}/gsoap/dom.c
} else {
    SOURCES += $${PWD}/gsoap/stdsoap2.cpp                $${PWD}/gsoap/dom.cpp
}

LIBS += -lws2_32

leaning.pri

DESTDIR = $${PWD}/../bin

include($${PWD}/../gsoap.pri)
INCLUDEPATH += $${PWD}/nsmap

#contains(CONFIG,soap_server) {
    !exists(./temp):system("mkdir  temp")
    SOAP_GEN_DIR= ./temp/$${GSOAP_NAME}
    !exists($${SOAP_GEN_DIR}):system("cd temp && mkdir $${GSOAP_NAME}")
    !exists($${SOAP_GEN_DIR}/$${GSOAP_NAME}.wsdl) {
        system("soapcpp2.exe -d./$${SOAP_GEN_DIR} ./nsmap/$${GSOAP_NAME}.h")
    }
#}

SOAP_GEN_DIR= $${PWD}/temp/$${GSOAP_NAME}

SOAP_M_HEADERS += $${SOAP_GEN_DIR}/soapH.h                   $${SOAP_GEN_DIR}/soapStub.h
SOAP_M_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp                   $${SOAP_GEN_DIR}/soapServer.cpp

SOAP_C_HEADERS += $${SOAP_GEN_DIR}/soapH.h                  $${SOAP_GEN_DIR}/soapStub.h
SOAP_C_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp                   $${SOAP_GEN_DIR}/soapClient.cpp

SOAP_L_SOURCES += $${SOAP_GEN_DIR}/soapC.cpp                   $${SOAP_GEN_DIR}/soapClientLib.cpp                   $${SOAP_GEN_DIR}/soapServerLib.cpp

SOAP_CP_OTHERS += $${SOAP_GEN_DIR}/$${GSOAP_NAME}.*.req.xml                   $${SOAP_GEN_DIR}/$${GSOAP_NAME}.*.res.xml                   $${SOAP_GEN_DIR}/ns.xsd                   $${SOAP_GEN_DIR}/$${GSOAP_NAME}.nsmap

INCLUDEPATH += $${SOAP_GEN_DIR}
contains(CONFIG,soap_server) {
    TARGET = $${GSOAP_NAME}
    HEADERS += $${SOAP_M_HEADERS}
    SOURCES += $${SOAP_M_SOURCES}
    QMAKE_CLEAN += $${SOAP_GEN_DIR}/$${GSOAP_NAME}.wsdl                $${SOAP_M_HEADERS}                $${SOAP_M_SOURCES}                $${SOAP_C_HEADERS}                $${SOAP_C_SOURCES}                $${SOAP_CP_OTHERS}                $${SOAP_L_SOURCES}
} else {
    TARGET = $${GSOAP_NAME}_client
    HEADERS += $${SOAP_C_HEADERS}
    SOURCES += $${SOAP_C_SOURCES}
}

HEADERS += $${PWD}/nsmap/$${GSOAP_NAME}.h

leaning.pro

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += add            add_client            calc            calc_client

add.pro

GSOAP_NAME = add
TEMPLATE = app
CONFIG += console soap_server

include(../leaning.pri)

HEADERS +=

SOURCES +=     main.cpp

add_client.pro

GSOAP_NAME = add
TEMPLATE = app
CONFIG += console

include(../leaning.pri)

HEADERS +=

SOURCES +=     main.cpp

3. 编译后的项目目录结构

nsmap下的接口文件为手动编辑所得(c的接口定义,通过它生成gsoap项目所需的源码文件)。

temp目录为编译中间产物,由编译时自动产生。

gsoap2
│  gsoap.pri
│  gsoap28.pro
│  gsoap28.pro.user
│  mmsys.env
│
├─bin
│      add.exe
│      add_client.exe
│      calc.exe
│      calc_client.exe
│      soapcpp2.exe
│      wsdl2h.exe
│
├─gsoap
│      .dirstamp
│      dom.c
│      dom.cpp
│      stdsoap2.c
│      stdsoap2.cpp
│      stdsoap2.h
│      typemap.dat
│
└─leaning
    │  leaning.pri
    │  leaning.pro
    │
    ├─add
    │      add.pro
    │      main.cpp
    │
    ├─add_client
    │      add_client.pro
    │      main.cpp
    │
    ├─calc
    │      calc.pro
    │      main.cpp
    │
    ├─calc_client
    │      calc_client.pro
    │      main.cpp
    │
    ├─nsmap
    │      add.h
    │      calc.h
    │
    └─temp
        ├─add
        │      add.add.req.xml
        │      add.add.res.xml
        │      add.nsmap
        │      add.wsdl
        │      ns.xsd
        │      soapC.cpp
        │      soapClient.cpp
        │      soapClientLib.cpp
        │      soapH.h
        │      soapServer.cpp
        │      soapServerLib.cpp
        │      soapStub.h
        │
        └─calc
                calc.add.req.xml
                calc.add.res.xml
                calc.div.req.xml
                calc.div.res.xml
                calc.mul.req.xml
                calc.mul.res.xml
                calc.nsmap
                calc.pow.req.xml
                calc.pow.res.xml
                calc.sub.req.xml
                calc.sub.res.xml
                calc.wsdl
                ns.xsd
                soapC.cpp
                soapClient.cpp
                soapClientLib.cpp
                soapH.h
                soapServer.cpp
                soapServerLib.cpp
                soapStub.h

4.  gsoap2的动态库项目

暂未涉及,学习后再补

时间: 2024-10-14 09:31:22

初识gsoap2 及 使用qt开发gsoap程序项目文件管理的相关文章

树莓派入门教程——使用Qt开发界面程序

前言        Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程.2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具.2012年,Qt被Digia收购.2014年4月,跨平台集成开发环境Qt Creator 3.1

使用Qt开发绘制多个设备的流量曲线图(附带项目图)

一.说明: 在实际项目中,主要是使用Qt开发CS程序,当然主要是客户端.公司项目中有这个需求是实时显示多个设备的流量曲线图,设备将流量信息发给服务端,服务端再将信息通过Socket发给Qt客户端,Qt客户端通过Socket接收后实时显示在程序的一个窗口上:这个显示是以曲线图的展示方式. 二.界面模型接到这个功能需求后,使用的界面模型如下图所示,图示已经标示的很清楚了,我就不多详细描述了: 三.功能分析 1.由于设备较多,超过100台,所以不可能每个设备的流量曲线都用一种颜色,因此只选择几种比较明

用Qt开发第一个Hello World程序

配置好Qt的环境变量之后,我们才可以进行下面的通过终端来使用Qt开发这个第一个程序 因为Qt的文件路径不能有中文否则会报错,所以一般都把工程文件都建立在根目录 我们创建的Qt程序包含两个部分:1.GUI程序 2.显示字符串,所以输入代码: 编译这个程序 如果提示找不到qmake就说明环境变量配置有问题,正常如上不会有任何提示 输入ls之后,我们可以看到目录下生成了一个pro文件,这是一个与平台无关的项目文件 然后接着输入qmake就可以完成编译,然后用ls看看有什么文件,多了一个Makefile

Qt开发程序在Windows 10应用需要管理员运行的解决思路

Qt开发程序在Windows 10应用需要管理员运行的解决思路 过了很长的时间没有发布博客了,但是我依然努力地开发Qt程序.目前呢,我发现开发Qt程序在Windows 10上有一个怪现象--有些程序右下角加上了盾牌的标志.那这个为什么呢? 原来是因为我的程序名称包含了Patch,结果就包含了加上了盾牌的标志.如果我去掉了Patch标志,盾牌就消失了.原来Windows对于文件名的一些敏感字,会选择性地做出一些防御操作.看来Windows 10在给我们安全的同时还给我们带来了"意想不到"

Qt 开发程序后的公布问题

Qt 开发程序后的公布问题 Qt 是一套跨平台 C++ 图形用户界面应用程序开发框架,利用它能够很方便的开发各种类型的应用程序.可是随着 Qt 的发展.功能越来越强大,公布时须要文件也越来越多.公布时把须要的文件挑出来就变得有些难度,好多刚開始学习的人花费了几天时间也没能让他的程序在别人的电脑上顺利的运行起来. 百度 "qt 程序公布" 能够找到一些文章.里面给出的方法都是自己一个个的把须要的文件找出来.事实上不须要这么费劲,Qt 里早就提供了一个小工具帮我们公布程序. 打开Qt 的安

Qt 开发程序后的发布问题

Qt 开发程序后的发布问题 Qt 是一套跨平台 C++ 图形用户界面应用程序开发框架,利用它可以非常方便的开发各种类型的应用程序.但是随着 Qt 的发展,功能越来越强大,发布时需要文件也越来越多.发布时把需要的文件挑出来就变得有些难度,好多初学者花费了几天时间也没能让他的程序在别人的电脑上顺利的运行起来. 百度 "qt 程序发布" 可以找到一些文章.里面给出的方法都是自己一个个的把需要的文件找出来.其实不需要这么费劲,Qt 里早就提供了一个小工具帮我们发布程序. 打开Qt 的安装路径,

分享我用Qt开发的应用程序【二】在Qt应用程序中使用字体图标fontawesome

为了使用简单,需要先写一个单件类,头文件的代码如下: 其中静态方法Instance保证IconHelper的实例全局唯一 (注意构造函数已经私有化了) #ifndefICONHELPER_H #defineICONHELPER_H #include<QObject> #include<QMutex> #include<QMutexLocker> #include<QtGui> #include<QtWidgets> #include<qfo

【Qt开发】01-第一个Qt程序Hello World!

一:说在前头 我的第一份工作是做生产工具,当时用的MFC,IDE是VC6.0,现在想想真是古董级别,10年至今,微软也一直没有对MFC进行升级, 冥冥中感觉微软自己都放弃MFC了,市场上貌似MFC的岗位越来越了,基本上也都是原先的项目维护,qt已经成为新的客户端开发的趋势, 顺者昌,逆者亡,无奈只能放弃MFC转投Qt了,Qt实现了跨平台功能,一套代码可以在windows,linux,mac上运行,大大节省了开发者平台移植 工作量,Qt号称要做出像网页一样漂亮的界面,小编会出一系列的Qt开发的文章

【C/C++学院】(13)QT开发技术/QT 基础/QT 信号和槽

Qt是一个跨平台的c++图形用户界面用用程序框架. Qt安装说明: windows下环境变量path需要加入以下路径,以便QT写的程序可以离开QT开发环境独立运行 C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin\;C:\Qt\Qt5.2.0\Tools\mingw48_32\bin; linux下需要设置.bash_profile文件 PATH中加入/opt/Qt5.2.0/5.2.0/gcc/bin 用root用户登录系统,进入/usr/lib目录后执行 ln libGL