gSoap сгенерировал инициализацию и использование клиентской структуры (используя привязки ANSI C)
Прежде всего, я искал и, хотя есть несколько предлагаемых решений для инициализации структуры, я не нашел ничего, что прямо отвечало бы этомупроблема.
Кроме того, этот вопрос публикуется просто для того, чтобы помочь кому-либо, у кого есть подобный вопрос, например Я уже разработал решение и because of my newbie status
опубликует его немедленно at least 8 hours
после публикации.
Тем не менее, я все еще очень заинтересован в комментариях и изменениях к решению, которое я предложу, от тех, у кого есть лучшие решения или с большим опытом.в gSoap ...
Сценарий:
Я довольно новичок в мыле в целом и использую сгенерированный gSoap исходный код клиента для построения ANSIC привязки для доступа к веб-сервисам.Аргументы 4 и 5 функций "soap_call__", предоставляемых в качестве интерфейсов приложений (определенных в soapClient.c), часто являются сложными (вложенными) структурами.В частности, аргумент 4, поскольку он является структурой ввода, должен быть объявлен, инициализирован, размещен и освобожден в вызывающем приложении. Например,
, учитывая следующий сгенерированный прототипом gSoap:
SOAP_FMAC5 int SOAP_FMAC6 soap_call___ns1__SendFile((struct soap *soap, const char *soap_endpoint, const char *soap_action, struct ns3__send *mtdf, struct recv *response)
со следующим определением структуры (глядя только на аргумент 4), определенным в soapStub.h
(ПРИМЕЧАНИЕ. Я сократил имена и сократил количество членов по сравнению с исходным содержимымструктуры для иллюстративных целей)
struct ns3__send
{
char *wsStDate; /* optional element of type xsd:date */
int *wsStDuration; /* optional element of type xsd:int */
int *wsStFailures; /* optional element of type xsd:int */
char *wsStFileName; /* optional element of type xsd:string */
struct ns3__Param *details; /* optional element of type ns3:Param */
};
struct ns3__Param
{
int __sizeRow; /* sequence of elements <wsStdDetailsRow> */
struct ns3__Row *row; /* optional element of type ns3:xxmtdfws_wsStdDetailsRow */
};
struct ns3__Row
{
int *wsStdSeq; /* optional element of type xsd:int */
char *wsStdStep; /* optional element of type xsd:string */
char *wsStdTestDesc; /* optional element of type xsd:string */
char *wsStdLowLim; /* optional element of type xsd:string */
};
Вопрос:
Как члены и указатели в этомсложная (вложенная) структура ввода правильно инициализирована, выделена память, присвоены значения и освобождена память, так что они могут использоваться в вызывающем приложении?