1.下载gsoap
https://sourceforge.net/projects/gsoap2/
2.下载wsdl文件
https://www.onvif.org/profiles/specifications/
需要下载你需要接口的wsdl文件和 onvif.xsd, common.xsd types.xsd
3. 新建一个文件夹
4.把如下文件
(1)goap_2.8.17\gsoap-2.8\gsoap 路径下的typemap.dat
(2)gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32 路径下的wsdl2h.exe soapcpp2.exe
(3)下载的wsdl文件和xsd文件
放在新建的文件夹下
5. 打开windows平台的cmd(win+r) ,通过cmd进入到新建的文件夹下面然后执行以下命令:
其中wsdl文件为你自己文件
➣参数解析
-c : 生成c风格代码(注:后缀名还是.cpp ,但实际上是.c)
-c++:生成c++风格代码(注 : 默认是生成c++代码)
-x : 表示不生成xml 文件(注:生成的xml文件,有助于了解发送是SOAP是怎样的结构,建议不使用-x)
-l : 表示指定导入路径
-C : 表示生成客户端代码
-S : 表示生成服务端代码
-s : 不使用STL代码
-o: 生成.h文件叫什么名字
-t : 后面紧跟“typemap.dat”这个批处理文件
5. 如果出现Cannot open '../../../ver10/schema/onvif.xsd' to retrieve schema这个错误就修改wsdl文件中的./../../ver10/schema/onvif.xsd为本地路径
执行结束后生成了onvif.h文件
6.如果需要鉴权功能则需要打开onvif.h增加如下一句话
7.
(1)将gsoap_2.8.14\gsoap-2.8\gsoap\import拷贝到同gsoapcpp2.exe文件夹下
(2)将gsoap_2.8.14\gsoap-2.8\gsoap\custom拷贝到同gsoapcpp2.exe文件夹下
8.
执行命令:
soapcpp2 -2 -c onvif.h -I .\custom -I .\import -I .\import
➣参数解析
-c : 生成c风格的代码,因为默认是c++风格的代码
-2:采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到
-I : 指定路径
-x : 不产生xml 文件(不建议是用该选项,xml在开发中具有参考意义)
执行完以上命令后,可以看见当前文件夹下出现了很多.h文件.c文件.nsmap文件.xml文件
9. 提取需要的文件
将soapC.c , soapH.h , soapClient.c , soapClientLib.c , soapServer.c(用于服务端/设备端的开发) , soapServerLib.c(用于服务端/设备段的开发) soapStub.h , onvif.h(该文件基本已经没有用处了)拷贝到一个单独的文件夹"ONVIF"下面。
将文件gsoap-2.8\gsoap\dom.c拷贝到ONVIF中(该文件好像没什么作用)
将文件gsoap-2.8\gsoap\custom\duration.c拷贝到ONVIF中
将文件gsoap-2.8\gsoap\custom\duration.h拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\mecevp.c拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\mecevp.h拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\smdevp.c拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\smdevp.h拷贝到ONVIF中
将文件gsoap-2.8\gsoap\stdsoap2.h拷贝到ONVIF中
将文件gsoap-2.8\gsoap\stdsoap2.c拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\threads.c拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\threads.h拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\wsaapi.c拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\wsaapi.h拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\wsseapi.h拷贝到ONVIF中
将文件gsoap-2.8\gsoap\plugin\wsseapi.c拷贝到ONVIF中
将生成的.nsmap文件中的任意一个(因为生成的.nsmap文件中的内容都是一样的)拷贝到ONVIF中
10.框架生成结束编写main函数即可,但是编译中会报错,狠毒偶函数未定义。这些接口需要我们手动去实现,其实在onvif.h中能看到。