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

我不懂电脑 2002-12-16 11:36:54
最近用TMSComm编写串口通信程序,需要用到二进制方式,看了msdn和delphi的例子都很简单,可在bcb里同样方法收不到数据,bcb里要怎样接收二进制方式下的数据啊?
...全文
232 9 打赏 收藏 转发到动态 举报
写回复
用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来监控串口通讯.
代码转载自:https://pan.quark.cn/s/35fbc1c0259a 在信息技术领域中,开发者经常需要与各式各样的控件进行交互,这些控件是软件构建过程中的关键元素,为编程人员提供了多样化的功能接口和高效的编程途径。 其中,TMSComm控件作为一个专门用于串行通信的组件,在设备管理、数据交换等场景中得到了广泛的应用。 本文将系统性地阐述TMSComm注册工具的功能特性、操作流程以及其在实际项目中的具体运用。 TMSComm控件是由TMS Software公司设计的一款高效且功能强大的串行通信解决方案,它兼容多种串行通信标准,例如RS232、RS485等,并且配备了丰富的应用程序接口,为开发者的进一步定制提供了便利。 然而,与所有其他Windows平台下的控件类似,TMSComm控件在投入使用前必须完成注册步骤,以确保系统能够准确识别并调用该组件。 TMSComm注册工具应运而生,其主要职责是自动检测TMSComm控件的注册情况,并在必要时执行注册动作。 这一工具显著优化了开发者的工作流程,有效预防了手动注册过程中可能出现的错误和繁琐操作。 借助TMSComm注册工具,用户能够保证控件注册的迅速性和精确性,进而提升整体开发效能。 TMSComm注册工具的操作步骤十分便捷。 用户首先需要获取并解压包含“TMSComm注册工具”的文件包,确认文件完整性。 随后,启动该工具,它会自动检测系统配置,识别任何未注册的TMSComm控件。 一旦发现未注册的组件,工具将向用户发出注册提示,用户只需通过点击确认即可顺利完成整个操作。 在整个使用过程中,用户无需拥有深厚的计算机专业知识或编程背景,这使TMSComm注册工具成为无论是初学者还是资深开发者的理想选择。 在实际操作层面,TMSCo...

13,875

社区成员

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

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