如何在C中使用gSOAP创建soap_dom_element并将其分配给__any?

时间:2019-02-12 03:12:39

标签: c gsoap

我正在尝试使用gSOAP库将这些C ++行移植到C:

trt__Capabilities *capabilities = ctx->getMediaServiceCapabilities(this->soap);
tds__GetServicesResponse.Service.back()->Capabilities->__any = soap_dom_element(this->soap, NULL, "trt:Capabilities", capabilities, capabilities->soap_type());

我以为可以做到这一点,但是在C gSOAP API中不能像这样使用soap_dom_element

tds__GetServicesResponse->Service[1].Capabilities->__any = soap_dom_element(soap, NULL, "trt:Capabilities", capabilities, SOAP_TYPE__tds__Service_Capabilities);

我尝试编译的另一件事,但在运行时崩溃

struct trt__Capabilities *capabilities = fillServiceCapabilities(ctx, soap);
char * tag = "trt:Capabilities";
char * type = "";
int id = -1;
soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, capabilities, 
    SOAP_TYPE_trt__Capabilities), type);
void * elt =  soap_element_end_out(soap, tag);
soap_add_elt(&tds__GetServicesResponse->Service[1].Capabilities->__any, elt);

请有人帮助我找到创建新dom元素并将其分配给“ struct soap_dom_element __any”对象的正确方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要做的只是将interface B { name: string; age: number; } function test(key: keyof B) { } const c: { age: keyof B } = { age: 'age' } test(c.age); 成员设置为具有__any的动态分配的DOM节点:

soap_elt_new

,然后将此DOM节点的可序列化的“ node”和“ type”值设置为tds__GetServicesResponse->Service[1].Capabilities->__any = soap_elt_new(soap, NULL, "trt:Capabilities”); 类型的可序列化的C capabilities数据:

tds__Service_Capabilities

这会将soap_elt_node(tds__GetServicesResponse->Service[1].Capabilities->__any, capabilities, SOAP_TYPE__tds__Service_Capabilities); 序列化为元素capabilities

请参见gsoap C DOM API documentation

编辑:我的意思是<trt:Capabilities>,而不是上面纠正的soap_elt_node