Работаю с камерой Axis M1054 использую onvif для взаимодействия с ней. devicemgmt.wsdl перегнал с помощью gsoap в с++ (STL) прокси. C помошью сниффера проследил отправку пакетов с компа на камеру и обратно.Всю в порядке.Происходит вылет программы когда приходит ответ от камеры , точнее сказать , при разборе ответа.
Функция создания запроса на камеру
Функция разбора ответаCode:void Dialog::on_pushButton_interview_clicked() { struct soap *soap1 = soap_new(); _ns1__GetCapabilities *ns1__GetCapabilities = new _ns1__GetCapabilities; ns1__GetCapabilities->soap = soap1; _ns1__GetCapabilitiesResponse *ns1__GetCapabilitiesResponse = new _ns1__GetCapabilitiesResponse; ns1__GetCapabilitiesResponse ->soap = soap1; ns2__CapabilityCategory CapabilityCategory = ns2__CapabilityCategory__All; ns1__GetCapabilities->Category.push_back(CapabilityCategory); DeviceBindingProxy DeviceBinding; DeviceBinding.GetCapabilities("http://192.168.0.80/onvif/device_service", NULL, ns1__GetCapabilities, ns1__GetCapabilitiesResponse); if(ns1__GetCapabilitiesResponse == NULL) { return; } }
Помогите в чем проблема????!!!Code:SOAP_FMAC3 _ns1__GetCapabilitiesResponse * SOAP_FMAC4 soap_in__ns1__GetCapabilitiesResponse(struct soap *soap, const char *tag, _ns1__GetCapabilitiesResponse *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; a = (_ns1__GetCapabilitiesResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__GetCapabilitiesResponse, sizeof(_ns1__GetCapabilitiesResponse), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); if (soap->clist->type != SOAP_TYPE__ns1__GetCapabilitiesResponse)//вылет программы происходит здесь!!!!!!!!!!!!!!!!!!!!!!!!! { soap_revert(soap); *soap->id = '\0'; return (_ns1__GetCapabilitiesResponse *)a->soap_in(soap, tag, type); } } size_t soap_flag_Capabilities1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; if (soap_flag_Capabilities1 && soap->error == SOAP_TAG_MISMATCH) if (soap_in_PointerTons2__Capabilities(soap, "ns1:Capabilities", &(a->_ns1__GetCapabilitiesResponse::Capabilities), "ns2:Capabilities")) { soap_flag_Capabilities1--; continue; } /* transient soap skipped */ soap_check_result(soap, "ns1:Capabilities"); if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) break; if (soap->error) return NULL; } if (soap_element_end_in(soap, tag)) return NULL; } else { a = (_ns1__GetCapabilitiesResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__GetCapabilitiesResponse, 0, sizeof(_ns1__GetCapabilitiesResponse), 0, soap_copy__ns1__GetCapabilitiesResponse); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Capabilities1 > 0)) { soap->error = SOAP_OCCURS; return NULL; } return a; }

Reply With Quote

