0

我必须在 c 代码中使用一个使用多态性的 wsdl 来进行 GSOAP 调用。根据 GSOAP 文档(8.2 使用 typemap.dat 文件自定义数据绑定),它需要在 typemap.dat 中进行修改,这是将基本类型重新声明为包装器类型。因为,我只想更改用法,所以我按照文档中的建议在声明部分使用了省略号 (...),但 wsdl2h 似乎不理解省略号并将它们按原样放置在输出头文件中,这会在代码构建期间导致语法错误。

在 typemap.dat 中为多态绑定完成了添加:

[ 
struct __ns__PolymorphicStruct
{ 
   int __type;
   void *__item;
   struct ns__PolymorphicStruct *__self; 
};
]
ns__PolymorphicStruct = ... | struct __ns__PolymorphicStruct | struct __ns__PolymorphicStruct

如果我在这里做错了什么,有人可以帮忙或指出吗?

4

1 回答 1

0

省略号用于表示 wsdl2 生成的 ns__PolymorphicStruct 定义,因此在您的情况下,您将得到两个声明。

利用:

[ 
struct __ns__PolymorphicStruct
{ 
   int __type;
   void *__item;
   struct ns__PolymorphicStruct *__self; 
};
]
ns__PolymorphicStruct = | struct __ns__PolymorphicStruct | struct __ns__PolymorphicStruct

或使用以下内容(尽管 ns__PolymorphicStruct 的覆盖声明的位置会改变):

ns__PolymorphicStruct = \ 
struct __ns__PolymorphicStruct\
{\
   int __type;\
   void *__item;\
   struct ns__PolymorphicStruct *__self;\
};\
| struct __ns__PolymorphicStruct | struct __ns__PolymorphicStruct

其中 \ 用于允许声明继续到下一行。

于 2013-10-30T15:56:50.903 回答