gsoap 传递数组 求解!!

dreamswang 2012-11-15 10:15:58
最近项目中要用到gsoap,被这咚咚折腾了近一周了,所以跑CSDN上面来求解了!!!希望熟悉gsoap的朋友指点,先谢谢了!



这是我写的calc.h 头文件:
定义了一个xsd__CardInfo结构体,主要想通过ns__getCardsInfoResPonse返回结xsd__CardInfo中的ID指针。
struct xsd__CardInfo
{
int *ID;
int len;
};
struct ns__getCardsInfoResPonse
{
struct xsd__CardInfo *__ptr;
};
int ns__getCardsInfo(int size, struct ns__getCardsInfoResPonse *result);


根据这头文件,通过soapcpp2.exe可以生成客服端,服务器,代理类等代码,熟悉的朋友都知道,就不多说。

下面是我的服务器端代码:

#include"iostream"
#include "soapcalcService.h"
using namespace std;

int main()
{
calcService calc;
int port;
ns__getCardsInfoResPonse result ;
calc.getCardsInfo(10,&result);
for(int i = 0; i < 10; i++)
{
cout << result.__ptr->ID[i]<<endl;
}
cin>>port;
if(calc.run(port))
{
return 0;
}
return 0;
}
int calcService::getCardsInfo(int size, struct ns__getCardsInfoResPonse *result)
{

int *ptr = new int [size];
for(int i = 0; i < size ;i++)
{
ptr[i] = i;
}
xsd__CardInfo *cardInfo = new xsd__CardInfo;
cardInfo->ID = ptr;
result->__ptr = cardInfo;
return SOAP_OK;
}


为了测试getCardsInfo这个函数的正确性,我在主函数中打印了ns__getCardsInfoResPonse result.__ptr->ID[i]的值,完全米有问题。

下面是客户端代码:
	ns__getCardsInfoResPonse result;
calcProxy calc;
char server[] = "http://localhost:8081";
calc.soap_endpoint = server;
calc.getCardsInfo(10,&result);
for(int i = 0 ;i < 10 ;i++)
{
int temp = result.__ptr->ID[i];
}

客服端只能返回一个值,也就是result.__ptr->ID[0],指针后面的地址就是乱七八糟的了。
我猜想是客服端通过http协议解析后的值不对,导致地址所对应的值不对了,因为在服务器端是没问题的。

以上就是我的问题,希望熟悉gsoap的朋友能帮帮我!先谢谢了!
...全文
115 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
death10001 2013-02-19
  • 打赏
  • 举报
回复
你这个返回一个值就对了,呵呵。 getCardsInfo函数里面指针的赋值操作是浅拷贝。 xsd__CardInfo *cardInfo = new xsd__CardInfo; cardInfo->ID = ptr; result->__ptr = cardInfo;

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧