200分,关于WEB服务复杂数据传递的问题

jaffy 2008-12-23 02:45:52
WEB服务地址:
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl

我调用getStockImageByteByCode函数,返回一个GIF图片的字节流。

_di_ChinaStockWebServiceSoap service;
service = GetChinaStockWebServiceSoap(true,"http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl");

TByteDynArray a;

a = service->getStockImageByteByCode(Edit3->Text);

调试下A有值,但不知道如何解析?

高人知道来相助

...全文
263 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 oyljerry 的回复:]
引用 31 楼 unsigned 的回复:
引用 30 楼 jaffy 的回复:
我在公司的3台机器上测试了,现象都一样,会不会是BCB6的原因啊,看网上有人说BCB6做复杂数据传递的时候有问题?
听僵哥来了后怎么说

我已经回复过了...

汗...还要我帮忙顶起来^_^

debug的时候,看内存中是不是有正确的数据
[/Quote]简单地回复,有得到,但是由于缺少相应的定义未完成正确的处理.
oyljerry 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 unsigned 的回复:]
引用 30 楼 jaffy 的回复:
我在公司的3台机器上测试了,现象都一样,会不会是BCB6的原因啊,看网上有人说BCB6做复杂数据传递的时候有问题?
听僵哥来了后怎么说

我已经回复过了...

汗...还要我帮忙顶起来^_^
[/Quote]
debug的时候,看内存中是不是有正确的数据
痞子酷 2008-12-25
  • 打赏
  • 举报
回复
圣诞快乐,接分!
jaffy 2008-12-24
  • 打赏
  • 举报
回复
我在公司的3台机器上测试了,现象都一样,会不会是BCB6的原因啊,看网上有人说BCB6做复杂数据传递的时候有问题?
听僵哥来了后怎么说
僵哥 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 jaffy 的回复:]
我是在BCB6下测试的,用的你的代码,b.Length还是1;但用IE测试WEB服务正常,并且我测试getStockInfoByCode 这个服务返回数组的也正常,会是什么问题啊?
[/Quote]
有可能是控件问题,也可能是其它。我用的是2007
kexin1 2008-12-24
  • 打赏
  • 举报
回复
我觉得还是长度问题,在仔细的检查一下
jaffy 2008-12-24
  • 打赏
  • 举报
回复
我是在BCB6下测试的,用的你的代码,b.Length还是1;但用IE测试WEB服务正常,并且我测试getStockInfoByCode 这个服务返回数组的也正常,会是什么问题啊?
jaffy 2008-12-24
  • 打赏
  • 举报
回复
晚上结贴
僵哥 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 jaffy 的回复:]
我在公司的3台机器上测试了,现象都一样,会不会是BCB6的原因啊,看网上有人说BCB6做复杂数据传递的时候有问题?
听僵哥来了后怎么说
[/Quote]
我已经回复过了...

汗...还要我帮忙顶起来^_^
jiang_jiajia10 2008-12-23
  • 打赏
  • 举报
回复
UP
jaffy 2008-12-23
  • 打赏
  • 举报
回复
晕,明天在单位再测试.
僵哥 2008-12-23
  • 打赏
  • 举报
回复
	TMemoryStream * mem = new TMemoryStream();
try{
_di_ChinaStockWebServiceSoap sp;
sp = GetChinaStockWebServiceSoap();
TByteDynArray b = sp->getStockImageByteByCode(L"sh000001");
ShowMessage(b.Length) ;
mem->WriteBuffer(&b[0],b.Length);
mem->Position = 0;
mem->SaveToFile("c:\\test.gif");
}__finally{
mem->Free();
}
僵哥 2008-12-23
  • 打赏
  • 举报
回复
抱歉,上班时间公司网络受限。

没有你说的问题呀。

[code=BatchFile]wsdlimp -C http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl[/code]
生成

ChinaStockWebService.cpp
ChinaStockWebService.h
添加进工程,然后


#include "ChinaStockWebService.h"

_di_ChinaStockWebServiceSoap sp;
sp = GetChinaStockWebServiceSoap();
TByteDynArray b = sp->getStockImageByteByCode(L"sh000001");
ShowMessage(b.Length) ;

显示有8151字节。请注意该WebService的说明,上海或深圳的代码须在前面添加小写的"sh"或者"sz"。
jaffy 2008-12-23
  • 打赏
  • 举报
回复
可第一个字符我看了的,的确是R,不知你测试了没有,但只返回一个字符,没有其他的了
僵哥 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 jaffy 的回复:]
不是运行错误,是编译错误,老大。
[/Quote]
我是说,你前面使用TByteDynArray的时候。
jaffy 2008-12-23
  • 打赏
  • 举报
回复
如何让A可以先取到值
jaffy 2008-12-23
  • 打赏
  • 举报
回复
不是运行错误,是编译错误,老大。
僵哥 2008-12-23
  • 打赏
  • 举报
回复
那就有可能没取到。
jaffy 2008-12-23
  • 打赏
  • 举报
回复
你的代码编译好了,但还是那个问题:
OleVariant a;

TMemoryStream *ams;

a = service->getStockImageByteByCode(Edit3->Text);

WriteVariant(a,ams);

编译不通过
[C++ Error] Unit4.cpp(107): E2285 Could not find a match for 'OleVariant::operator =(TByteDynArray)'
僵哥 2008-12-23
  • 打赏
  • 举报
回复
TByteDynArray a;
改为
OleVariant a;
然后用a来接收相应的内容,并且上面的WriteVariant写到Stream当中,看看有多少内容,是什么内容。
加载更多回复(15)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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