一、简介
ONVIF官网
ONVIF协议网络摄像机(IPC)客户端程序开发(1):专栏开篇
onvif协议开发
二、gSOAP
gsoap官网
1、下载和编译
下载地址
#! /bin/sh
# 指定源码目录(解压源码)
GSOAP_SRC=gsoap-2.8
PWD=`pwd`
echo "build gsoap..."
cd $GSOAP_SRC
# 配置,指定安装目录
./configure --prefix=${PWD}/gsoap_x86
make -j8 && make install
cd -
2、生成,编译和测试
#! /bin/sh
# 指定使用工具目录,(编译出来的)
BIN_DIR=gsoap_x86/bin
PWD=`pwd`
# 指定生成代码目录
OUT_DIR=MobileCode
echo "auto code create"
echo ${PWD}
cd ${OUT_DIR}
# 生成头文件
${PWD}/../${BIN_DIR}/wsdl2h -o $1 -c -s -t typemap.dat $2
# 生成c文件
${PWD}/../${BIN_DIR}/soapcpp2 -2 -C -c -x -Iimport -Icustom $1
cd -
echo "OK"
最终会生成,以下文件
注意:stdsoap2.h 和 stdoap2.c 是从源码拷贝过来的。。。
测试是参考,ONVIF协议网络摄像机(IPC)客户端程序开发(4):使用gSOAP生成Web Services框架代码,感谢!!!!
#include <stdio.h>
#include "MobileCodeWSSoap.nsmap"
#include "soapH.h"int main(int argc, char const *argv[])
{const char *endpoint = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx";struct soap *soap = NULL;struct _ns1__getMobileCodeInfo req;struct _ns1__getMobileCodeInfoResponse resp;soap = soap_new(); soap_set_mode(soap, SOAP_C_UTFSTRING);memset(&req, 0x00, sizeof(req));req.mobileCode = argv[1];req.userID = NULL;if(SOAP_OK == soap_call___ns1__getMobileCodeInfo(soap, endpoint, NULL, &req, &resp)) {if (NULL != resp.getMobileCodeInfoResult) {printf("%s\n", resp.getMobileCodeInfoResult);}}soap_destroy(soap); // delete deserialized objectssoap_end(soap);soap_free(soap);return 0;
}
问题1:
问题原因:
stdsoap2.c 使用了 namespaces 全局变量,而头文件可以看到,定义的是一个数组,并且有外部声明。
可以看到,,生成的文件 MobileCodeWSSoap.nsmap 中有定义 namespaces,,将其引入到,,,程序中就可以了。。。,如下如,,,引入之后编译通过。。
三、重要方法封装
期待。。。