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

标签 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”对象的正确方法。

谢谢!

最佳答案

您所需要做的就是简单地设置 __any动态分配的 DOM 节点的成员 soap_elt_new :

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

然后将此 DOM 节点的可序列化“node”和“type”值设置为可序列化的 C capabilities类型 tds__Service_Capabilities 的数据:

soap_elt_node(tds__GetServicesResponse->Service[1].Capabilities->__any, capabilities, SOAP_TYPE__tds__Service_Capabilities);

这序列化 capabilities作为元素<trt:Capabilities>

参见 gsoap C DOM API documentation .

编辑:我的意思是 soap_elt_node而不是soap_dom_node如上所述更正。

关于c - 如何在C中使用gSOAP创建soap_dom_element并将其分配给__any?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54642305/

相关文章:

c++ - 覆盖 gSOAP 中的命名空间

c - gsoap 2.8.10 和 2.8.11 及更高版本生成的 stdsoap.h 的区别

c - 命名管道窗口的行为

c - Delphi/Pascal 字符串文字到 C/C++

c - Visual Studio 2013 : "Cannot find or open the PDB file"

c++ - 使用 gSOAP 连接到 WCF Web 服务

c++ - gSOAP:RPC 截断 std::string 中的二进制数据

计算缓冲区中的实例数失败测试用例

检查字符串是否是字谜

c++ - 使用 C++ GSOAP 客户端访问 Amazon S3 服务