说明:
TVictorSerialPortList 是枚举串口列表类,TCommSerialPortInfo 的 PortList 就是这个类型的。
由于 TVictorSerialPortList 是从 TObject 继承过来的,使用的时候必须用 new 创建,不能定义为静态变量。
头文件:
Vcl.VictorEnumSerial.h
Fmx.VictorEnumSerial.h
相关类或控件:
TVictorSerialPortInfo, TCommSerialPortInfo, TYbCommDevice, TVictorComm
继承关系:
TObject
└TVictorSerialPortList
属性:
属性 |
类型 |
描述 |
Count |
int |
串口列表里面串口的数量 (只读属性)。
定义:
__property int Count = { read = _FGetSPCount }; |
Ports |
TVictorSerialPortInfo * [] |
串口列表里面的串口信息,TVictorSerialPortInfo * 数组。
定义:
__property TVictorSerialPortInfo *Ports [int] = { read = _FGetSPInfo };
通过这个属性可以读出串口列表里面每个串口的信息
示例程序:
见本页最后的示例程序。 |
PortNames |
String [] |
串口列表里面的串口名称,字符串数组,只需要串口名称时可以用这个属性。
定义:
__property String PortNames[int] = { read = _FGetPortName }; |
Strings |
String [] |
串口列表里面的串口名称,字符串数组,和 PortNames 相同,为了兼容老版本留下来的属性。
定义:
__property String Strings [int] = { read = _FGetPortName }; |
方法:
方法 |
描述 |
TCommQueue |
构造函数。
定义:
TCommQueue(long lSize=8192);
参数:
lSize 队列缓存字节数, 默认值 8192.
注意:
由系统自动调用(静态变量)或者通过 new 来调用(动态分配), 不需要直接调用。 |
~TCommQueue |
析构函数。
virtual ~TCommQueue();
注意:
由系统自动调用(静态变量)或者通过 delete 调用(动态分配), 不需要直接调用。 |
In |
进队列 (写入 FIFO 缓存)。
定义:
long In(const char far *s);
long
In(const char far *s, long n);
参数:
s: 进入队列的数据地址
n: 进入队列的数据字节数
(如果不指定 n 值, 相当于 n=1)
返回值:
实际写入队列的字节数, 有可能:
·等于参数
n 值, 所有数据都成功的进入队列
·小于参数 n 值, 原因是缓存已满, 不能容纳所有
n 个字节 |
Out |
出队列 (读出 FIFO 缓存)。
定义:
long Out(char far *s);
long
Out(char far *s, long n);
参数:
s: 要读出的数据存放的地址
n: 要读出数据的最大字节数
(如果不指定 n 值, 相当于 n=1)
返回值:
实际读出的字节数, 有可能: 小于等于参数 n 值, 取决于队列实际保存数据的字节数 |
Clear |
清空队列。
定义:
void Clear(void); |
示例程序:
使用 TVictorSerialPortList 枚举串口的示例程序 |
#include <memory>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::auto_ptr<TVictorSerialPortList>spList(new TVictorSerialPortList);
spList->EnumPorts();
int iPortCount = spList->Count;
int iRowCount = iPortCount + 1;
if(iRowCount < 2)iRowCount = 2;
StringGrid1->ColCount = 9;
StringGrid1->RowCount = iRowCount;
StringGrid1->Cells[0][0] = L"序号";
StringGrid1->Cells[1][0] = L"端口名称";
StringGrid1->Cells[2][0] = L"设备别名";
StringGrid1->Cells[3][0] = L"类型描述";
StringGrid1->Cells[4][0] = L"类型GUID";
StringGrid1->Cells[5][0] = L"设备标识";
StringGrid1->Cells[6][0] = L"设备描述";
StringGrid1->Cells[7][0] = L"位置信息";
StringGrid1->Cells[8][0] = L"注册表的子路径";
for(int iPortIdx=0; iPortIdx<iPortCount; iPortIdx++)
{
TVictorSerialPortInfo *lpPort = spList->Ports[iPortIdx];
int iRow = iPortIdx + 1;
StringGrid1->Cells[0][iRow] = IntToStr(iRow); // 序号
StringGrid1->Cells[1][iRow] = lpPort->PortName; // 端口名称
StringGrid1->Cells[2][iRow] = lpPort->FriendlyName; // 设备别名
StringGrid1->Cells[3][iRow] = lpPort->ClassDesc; // 类型描述
StringGrid1->Cells[4][iRow] = lpPort->ClassGuid; // 类型GUID
StringGrid1->Cells[5][iRow] = lpPort->InstanceID; // 设备标识
StringGrid1->Cells[6][iRow] = lpPort->DeviceDesc; // 设备描述
StringGrid1->Cells[7][iRow] = lpPort->LocationInfo; // 位置信息
StringGrid1->Cells[8][iRow] = lpPort->RegistryPath; // 注册表的子路径
}
for(int iRow=iPortCount+1; iRow<iRowCount; iRow++)
{
for(int iColNo=0; iColNo<StringGrid1->ColCount; iColNo++)
StringGrid1->Cells[iColNo][iRow] = L"";
}
} |
|