拨号的问题,请大家帮忙看看,在线。。。。。。。着急中!!!!!

icyfire129 2003-09-12 04:32:59
源程序如下:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString asBohao;
asBohao = "ATDT13\r\n";
if (MSComm1->PortOpen)
MSComm1->PortOpen = false;
MSComm1->PortOpen = true;
MSComm1->Output = asBohao;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
AnsiString MyInput;
int ByteNum;//收到的字节数
int BuffPtr;//接收缓冲区的指针,请声明为全局变量,
OleVariant RxBuff;//一个用于接收的OleVariant变量,
int w;
RxBuff=MSComm1->Input;
MyInput=WideString(RxBuff);
Memo1->Lines->Add(MyInput);
w = MyInput.Pos("BIS");
if (w > 0)
{
Memo1->Lines->Add("Modem connected!");
SendData();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SendData()
{
//发送数据
int i,j;
Byte bSendBuf[21],bSum;
OleVariant oleBuf;
int Bounds[2] = {0,21};
oleBuf= VarArrayCreate(Bounds,1, varByte);
AnsiString strBuff;

bSendBuf[0] = 0x68;
bSendBuf[1] = 15;
bSendBuf[2] = 15;
bSendBuf[3] = 0x68;
bSendBuf[4] = 0x43;//ok 99
bSendBuf[5] = 0%256;
bSendBuf[6] = 0x9a;
bSendBuf[7] = 0x01;
bSendBuf[8] = 0x06;
bSendBuf[9] = 1234%256;
bSendBuf[10] = 1234/256;
bSendBuf[11] = 0x01;
bSendBuf[12] = 1 % 256;
bSendBuf[13] = 1 % 256;
bSendBuf[14] = 0 % 256;
bSendBuf[15] = 0 % 256;
bSendBuf[16] = 11 % 256;
bSendBuf[17] = 10 % 256;
bSendBuf[18] = 3 % 256;
bSum = 0;
for(j = 4 ; j <= 18 ; j++)
bSum = bSum + bSendBuf[j];
bSendBuf[19] = bSum;
bSendBuf[20] = 0x16;

AnsiString asd = "";
for (i = 0 ;i < 21; i ++)
oleBuf.PutElement(bSendBuf[i],i);
MSComm1->Output = oleBuf;
Memo1->Lines->Add(WideString(oleBuf));
}

现在的问题是拨号和接收(在超级终端调试的时候)正常,但是发送报文却不对!用超级终端调试的时候对方看见的却是“hc”应该是报文的前两个字节,但是后面的却没有了!MEMO上看见的却是一堆乱码。我这么写代码有什么错误么?????着急呀!!!!
...全文
61 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
supwjhuLoveCjj 2003-09-13
  • 打赏
  • 举报
回复
用Memcpy,把你要发送的数据,copy进去,然后再用SendBuf发送

接收方再用 Memcpy还原,注意要使用效验位
icyfire129 2003-09-13
  • 打赏
  • 举报
回复
不会吧??谁都不会呀????
kingcaiyao 2003-09-13
  • 打赏
  • 举报
回复
不要用BYTE作为缓冲区的数据类型。用BYTE(即unsigned char)作为缓冲区的话,一旦碰到缓冲区有一个为0的元素,就会被当作结束符,而在元素0之后的所有内容都会被丢弃。用内存块发送比较和接收比较好.

13,822

社区成员

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

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