ONVIF官网
ONVIF协议网络摄像机(IPC)客户端程序开发(1):专栏开篇
onvif协议开发
#! /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 -
#! /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 objects
soap_end(soap);
soap_free(soap);
return 0;
}
问题1:
问题原因:
stdsoap2.c 使用了 namespaces 全局变量,而头文件可以看到,定义的是一个数组,并且有外部声明。
可以看到,,生成的文件 MobileCodeWSSoap.nsmap 中有定义 namespaces,,将其引入到,,,程序中就可以了。。。,如下如,,,引入之后编译通过。。
期待。。。