gsoap complexTtype, содержащий complexType

Для проекта мне нужно написать клиент gsoap на платформе Windows. Я использую MinGw G ++.
Я сгенерировал код, используя опцию -j, чтобы получить файлы мыла … Proxy.h и .cpp

Я хочу отправить запрос в наш веб-сервис, где ввод (ns2_getSMSByTimeSpan) и ответ (ns2Параметры _getSMSByTimeSpanResult) являются сложными типами.
Входной параметр содержит еще один complexType (ns2__TimeSpan), который состоит из 2 переменных time_t. В wsdl это определяется как xsd: dateTime.
Я пытаюсь — и не могу — установить эти 2 переменные time_t. Я просто не знаю, как получить к нему доступ. Комментарии в сгенерированных файлах мне не очень помогли, и я также не смог найти ответ, погуглив.

Это то, что на занятиях ns2_getSMSByTimeSpan и ns2__TimeSpan выглядят как в soapStub.h

class SOAP_CMAC _ns2__getSMSByTimeSpan
{
public:
std::string AccountKey; /* required element of type xsd:string */
ns2__TimeSpan *TimeSpan;    /* required element of type ns2:TimeSpan */
struct soap *soap;  /* transient */
public:
virtual int soap_type() const { return 17; } /* = unique id SOAP_TYPE__ns2__getSMSByTimeSpan */
virtual void soap_default(struct soap*);
virtual void soap_serialize(struct soap*) const;
virtual int soap_put(struct soap*, const char*, const char*) const;
virtual int soap_out(struct soap*, const char*, int, const char*) const;
virtual void *soap_get(struct soap*, const char*, const char*);
virtual void *soap_in(struct soap*, const char*, const char*);
_ns2__getSMSByTimeSpan() { _ns2__getSMSByTimeSpan::soap_default(NULL); }
virtual ~_ns2__getSMSByTimeSpan() { }
};

class SOAP_CMAC ns2__TimeSpan
{
public:
time_t *StartDate;  /* optional element of type xsd:dateTime */
time_t *EndDate;    /* optional element of type xsd:dateTime */
struct soap *soap;  /* transient */
public:
virtual int soap_type() const { return 11; } /* = unique id SOAP_TYPE_ns2__TimeSpan */
virtual void soap_default(struct soap*);
virtual void soap_serialize(struct soap*) const;
virtual int soap_put(struct soap*, const char*, const char*) const;
virtual int soap_out(struct soap*, const char*, int, const char*) const;
virtual void *soap_get(struct soap*, const char*, const char*);
virtual void *soap_in(struct soap*, const char*, const char*);
ns2__TimeSpan() { ns2__TimeSpan::soap_default(NULL); }
virtual ~ns2__TimeSpan() { }
};

Что я делаю до сих пор:
Я создаю экземпляр класса gsoap и создаю и создаю экземпляры complexTypes, которые я хочу использовать.

#include "soapSMSGateBindingProxy.h"#include "SMSGateBinding.nsmap"#include <iostream>

SMSGateBindingProxy instance;ns2__TimeSpan *timeSpan;
size_t *timeSpanSize = new size_t;
*timeSpanSize = sizeof(ns2__TimeSpan);

timeSpan = (ns2__TimeSpan*)
soap_instantiate(instance.soap,
SOAP_TYPE_ns2__TimeSpan,"","",
timeSpanSize);_ns2__getSMSByTimeSpan *smsByTimeSpan;
size_t *smsByTimeSpanSize = new size_t;
*smsByTimeSpanSize = sizeof(_ns2__getSMSByTimeSpan);

_ns2__getSMSByTimeSpanResult *smsResult;
size_t *smsResultSize = new size_t;
*smsResultSize = sizeof (_ns2__getSMSByTimeSpanResult);smsByTimeSpan = (_ns2__getSMSByTimeSpan*)
soap_instantiate(instance.soap,
SOAP_TYPE__ns2__getSMSByTimeSpan,"","",
smsByTimeSpanSize);

smsResult     = (_ns2__getSMSByTimeSpanResult*)
soap_instantiate(instance.soap,
SOAP_TYPE__ns2__getSMSByTimeSpanResult,"","",
smsResultSize);

delete smsByTimeSpanSize;
delete smsResultSize;

Затем я пытаюсь установить значение smsByTimeSpan-> TimeSpan-> StartDate, но при любом подходе клиент терпит крах:

struct tm test;

test.tm_hour = 0; test.tm_min = 0; test.tm_sec = 0;
test.tm_year = 2013 - 1900; test.tm_mon = 8; test.tm_mday = 28;

//  cout << mktime(&test) << timeSpan->StartDate << endl;  //trying to access the StartDate value crashes it

//  *smsByTimeSpan->TimeSpan->StartDate = mktime(&test);

//  smsByTimeSpan->TimeSpan->soap_put(instance.soap, "2013-06-28 08:00:00", "2013-12-02 15:05:00");

//  timeSpan.soap_put(instance.soap, "2013-12-02T14:10:03+02:00", "2013-12-02T14:50:03+02:00");

smsByTimeSpan->TimeSpan = timeSpan;     //this works
*smsByTimeSpan->TimeSpan = mktime(&test);           //this crashes

Кто-нибудь может сказать, пожалуйста, что я делаю не так? Или хорошо, скажите мне, как я правильно вводить данные в значение timeSpan-> StartDate?

заранее спасибо

0

Решение

Хорошо, я думаю, что узнал, что я делаю не так. Я полностью думал в неправильном направлении, когда создал этот Вопрос …
Моя проблема была с указателями. Я исправил это, изменив мой код на это:

time_t helper = mktime(&test);
smsByTimeSpan->TimeSpan = timeSpan;

timeSpan->StartDate = &helper;

и это было все. Возможно, кто-то еще может найти это полезным, когда ищет способ установить тип time_t в gsoap.

0

Другие решения

Других решений пока нет …