最近在写几个串口程序,由于以前都是用VB6写ActiveX DLL做通讯 ,里面加入Mscomm32.ocx做为通讯控件,已经很熟练了.可是对于VB的执行效率很是不满意,于是又拿起C++Builder与RS232通讯的书开始啃起来.打算用C++Builder来写上位机与下位机的通讯动态连接库,用VB做界面开发.
由于初次学C++语言,很多时间都不明白指针跟引用的关系,里面的字符串也有好多种类,其中AnsiString,Char * Char [],String 之间总是搞不清楚,所以进度很慢.
首先,VB的ActiveX DLL可以在引用的时候对串口进行初始化,都可以放在Class_Initialize里进行,也可以在退出的时候在Class_Terminate里对程序进行释放等操作.可是C++Builder写的DLL就没办法操作(才学几天,可能说的不对,应该有对DLL初始化操作,本人至今未学会),所以就只能写两个函数,一个是串口打开,一个是串口关闭,这两个函数做为内部函数,不对VB开放.这两个也是用的最多的函数.其次,VB可以用Variant数据类型对串口进行连继的读取,可以用变量加变量的方式把数据接收完.可是在C++Builder里就没办法(我是菜鸟,望大虾指导,邮箱 alpha704@163.com),只能用一个定长Char[]数组操作,每次接收完了把变量转成AnsiString然后相加,这样最后得到全部数据.再把数据转成Char *指针变量,传递出去.讲了这么多,最主要的还没讲到.下面接着来.
先讲讲传参数吧,首先我的函数都有返回值,函数名就是返回值,但不是对数据的返回,是对串口是否通讯成功的返回,也就是说一个布尔型(bool)数据,如果串口打不开,机器不在线或串口返回值错的我都返回false,如果全部操作都正确了,才返回true.也就是说,一个返回值是对串口操作而言,一个是对下位机数据的返回值.这里有用到字符串数据,关键在这里,字符串数据没办法