TMSComm的二进制方式怎么在bcb里接收数据呀?

我不懂电脑 2002-12-16 11:36:54
最近用TMSComm编写串口通信程序,需要用到二进制方式,看了msdn和delphi的例子都很简单,可在bcb里同样方法收不到数据,bcb里要怎样接收二进制方式下的数据啊?
...全文
211 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2002-12-16
  • 打赏
  • 举报
回复
我是按你的写的。不过我的MSComm好像有点问题,开始用事件还可以,后来不知怎么事件机制不起作用了,我现在用的多线程编写的。目前用bcb6总感觉有些小bug前几天用内存自动分配机制老是有内存溢出,后来改成预分配内存暂时解决了。而且bcb5下的Socket控件发出的数据,用bcb6的接收数据长度竟然不匹配。
耙子 2002-12-16
  • 打赏
  • 举报
回复
笑话我了。

你怎么写的?
BCB写OleVariant比Delphi麻烦多了。
我也不知道我这个是不是最简洁的。
我不懂电脑 2002-12-16
  • 打赏
  • 举报
回复
pazee(耙子) ( )
老大名不虚传,问题解决了。
耙子 2002-12-16
  • 打赏
  • 举报
回复
你的怎么写的?我总觉得我写得太麻烦了。

DWORD __fastcall TFrmMain::WriteComm(char *aTxBuff, int BuffSize)
{
OleVariant TxBuff;
int i;
if (MSComm->PortOpen) {
if (BuffSize > 0) {
TxBuff= VarArrayCreate(OPENARRAY(int, (0, BuffSize-1)), varByte);
for (i=0; i<BuffSize; i++)
TxBuff.PutElement(aTxBuff[i], i);
MSComm->Output= TxBuff;
}
}
return 0;
}
耙子 2002-12-16
  • 打赏
  • 举报
回复
if (MSComm->PortOpen)
return;
MSComm->CommPort= 2;
MSComm->Settings= "115200, n, 8, 1";
MSComm->InBufferSize= 4096;
MSComm->OutBufferSize= 2048;
MSComm->RThreshold= 1;
MSComm->SThreshold= 1;
MSComm->InputMode= comInputModeBinary;
try {
MSComm->PortOpen= true;
MSComm->InputLen= 0;
MSComm->InBufferCount= 0;
MSComm->OutBufferCount= 0;
ShowStatueMessage(1);
Log(1, "连接成功");
}
catch (...){
ShowStatueMessage(0);
}

..........

//---------------------------------------------------------------------------
void __fastcall TFrmMain::MSCommComm(TObject *Sender)
{
char szBuf[RxBUFFERSIZE]={0};
int i, j;
OleVariant RxBuff;
switch (MSComm->CommEvent)
{
/* case comEvSend:
ShowMessage("Send!!!!");
case comEvCTS:
ShowMessage("CTS!!!!");
case comEvDSR:
ShowMessage("DSR!!!!");
case comEvCD:
ShowMessage("CD!!!!");
*/
///*
case comEvReceive:
if (MSComm->InBufferCount > 0) {
RxBuff= MSComm->Input;
j= RxBuff.ArrayHighBound(1);
for (i=0; i<=j; i++)
szBuf[i]= RxBuff.GetElement(i);
szBuf[i]= NULL;
#ifdef _DEBUG
RichEdit1->Lines->Add(AnsiString(szBuf));
#endif
if (strstr(szBuf, "+CMTI") != 0) // 收到短消息了
{
// ShowMessage("来短消息了");
ProcessSMS(szBuf);
}
}

break;
//*/
case comEvRing:
ShowMessage("来电话了!!!!");
break;
}
}

你可能主要的麻烦在于 VC和BCB对于 OleVariant支持的不同。
我不懂电脑 2002-12-16
  • 打赏
  • 举报
回复
字符方式下的我会,但是字符方式下大于128的数据会丢失,二进制方式下数据不会丢失,但是收到的和实际情况不同所有数据都是0xFEEE
耙子 2002-12-16
  • 打赏
  • 举报
回复
三十年孤独 自己都弄不明白,我们能明白吗?
我写一个一个利用MSComm32和Nokia 6150通讯发短信的程序,我给你摘一段,班门弄斧了。
warton 2002-12-16
  • 打赏
  • 举报
回复
不太懂,帮你up
invalid 2002-12-16
  • 打赏
  • 举报
回复
帮你up吧.你可以尝试用其它的串口工具检测一下.
也可以用portMon来监控串口通讯.

13,871

社区成员

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

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