急救:variant数据传输,不能正确接受

ypdxcn 2009-07-15 11:04:05

发送端代码:

variant_t v;
int datatype = 4;\\DATATYPE
int len = 100;

v.vt = VT_UI1 | VT_ARRAY;
v.parray = SafeArrayCreateVector(VT_UI1,0,len + sizeof(int)*2);

LPBYTE pTemp = NULL;
SafeArrayAccessData(v.parray,(void**)&pTemp);

*(int*)(pTemp) =datatype; pTemp+=sizeof(int);
*(int*)(pTemp) =len; pTemp+=sizeof(int);

*(short*)(pTemp)=level;
SafeArrayUnaccessData(v.parray);

//发送数据
m_pDevice->Fire_Data(v,&lRet);


----------------------------------------------------------------------------------------
接收端如下:

#pragma pack(1)
typedef struct _tagHzxDataPkgHeader
{
int iType; //
int iSize; //
}HZX_DATA_PKG_HEADER, *PHZX_DATA_PKG_HEADER;
#pragma pack()

bool CProtocal::GetHzxDataPkg(BYTE * pbtBuff, UINT uBuffLen, UINT * puPkgMove, UINT * puPkgLen)
{
if (pbtBuff == NULL || uBuffLen == 0 || puPkgMove == NULL || puPkgLen == NULL)
{
return false;
}

HZX_DATA_PKG_HEADER * pHzxPkgHeader = (HZX_DATA_PKG_HEADER *)(pbtBuff + *puPkgMove);
if (pHzxPkgHeader->iSize > 0 &&
pHzxPkgHeader->iSize + sizeof(HZX_DATA_PKG_HEADER) <= uBuffLen)
{
*puPkgLen = pHzxPkgHeader->iSize + sizeof(HZX_DATA_PKG_HEADER);
return true;
}
else
{
return false;
}

return false;
}


pHzxPkgHeader->iType 的值是4,pHzxPkgHeader->iSize 的值不是100,而是很大,为什么呢?



...全文
32 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2009-07-15
  • 打赏
  • 举报
回复
这种方式原则是可行的.

楼主开发的时候测试正常?
只是到实施的机器上才出现问题?
在实施的机器上,测试过传递其它类型参数有问题没?

zw0558 2009-07-15
  • 打赏
  • 举报
回复
定义一个BYTE 数组来传输
ypdxcn 2009-07-15
  • 打赏
  • 举报
回复
我是COM里面做的,事件节点都已经搭好的,之前都是好的。
目前到一台要实施的机器上,发现这个问题。
oyljerry 2009-07-15
  • 打赏
  • 举报
回复
网络传输不需要用variant,直接用结构体等,然后转成char*等传输
ypdxcn 2009-07-15
  • 打赏
  • 举报
回复
开发的时候测试是正常的,实施其他的机器也成功的,换这一台就这样了。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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