0

我的首要目标是创建一个小型 ONVIF 客户端,用于以 C 或 C++ 获取相机信息。

gSOAP 似乎是一个不错的候选者,我想要实现的第一件事是制作一个小型控制台应用程序,该应用程序将使用 WS-Discovery 列出我在网络上拥有的一堆摄像机的地址,这是我以前用一点 .网络应用程序。

问题是我在第一个障碍上磕磕绊绊,我对我应该做什么感到有点困惑。我开始执行以下操作:

wsdl2h.exe -o WSDiscovery.h WS-Discovery.wsdl http://www.w3.org/2006/03/addressing/ws-addr.xsd

soapcpp2.exe -i -C -Iimport WSDiscovery.h -d output

,然后我从结果中做了一个项目soapC.cpp stdsoap2.cpp soapH.h soapStub.hthreads.h wsaapi.h wsddapi.h threads.c wsaapi.c wsddapi.c从 gsoap添加

这不会编译但是给出:

wsaapi.h(134): error C2061: syntax error : identifier 'wsa__FaultSubcodeValues'

我想我在这里搞错了,我对 gSOAP 上下文中的“插件”到底是什么感到困惑(我对这样的外部库的经验非常有限,而且我没有真正的 CS 方面的正式培训)。我只是应该对 wsdd 文件做我现在正在做的事情,还是应该将它们用作 soapcpp2.exe 进程的一部分?如果我只想要 WS-Discovery,我真的应该使用 wsdl2h.exe 吗?

我真的无法理解文档,也不明白我应该如何让它工作。一些帮助将不胜感激,这样我就可以着手解决实际困难的部分了!

4

1 回答 1

2

我猜这个问题来自于使用带有http://www.w3.org/2006/03/addressing/ws-addr.xsd架构的 WS-Adressing 插件(wsaapi.h/.c)。

gSOAP 包含可由 WS-discovery 插件 (wsddapi.h/.c) 使用的 wsdl2h 生成文件。

  • [GSOAP_DIR]/import/wsdd10.h 用于使用 WS-Adressing 2004/08 的 WS-Discovery 1.0 2005
  • [GSOAP_DIR]/import/wsdd.h 用于使用 WS-Adressing 2005/08 的 WS-Discovery 1.1 2009

由于 ONVIF 使用 WS-Discovery 1.0,您可以使用以下方法生成发现实现:

soapcpp2 -Cx [GSOAP_DIR]/import/wsdd10.h -I [GSOAP_DIR]/import -d output

接下来,您应该能够构建您的项目,包括 wsddapi.c wsaapi.c soapClient.cpp soapC.cpp

你可以从 github ws-discovery找到我的一些实验

于 2014-11-25T23:21:08.773 回答