Re: [问题] BCB在开启COM10产生问题

楼主: MasterChang (我爱ASM)   2014-10-04 11:45:34
我自己在用的code template拿去用吧!!有些元件名请自己对应~~
这段是把可用的com port抓到combobox列出来
TStringList *tmp=new TStringList;
TRegistry *reg=new TRegistry;
reg->RootKey=HKEY_LOCAL_MACHINE;
if(reg->OpenKey("\\HARDWARE\\DEVICEMAP\\SERIALCOMM",false))
{
reg->GetValueNames(tmp);
for(int i=0;i<tmp->Count;i++)
{
AnsiString asCOM=reg->ReadString(tmp->Strings[i]);
int iCOM=asCOM.SubString(4,asCOM.Length()-3).ToIntDef(0);
if(iCOM>0 && iCOM<=255)
{
Combo_Com->Items->Add(asCOM);
}
}
reg->CloseKey();
Combo_Com->ItemIndex = 0;
}
delete reg;
delete tmp;
下面这段就是从combobox选出的com port,然后开启他
YbCommDevice1->PortNo = Combo_Com->Items->Strings[Combo_Com->ItemIndex].SubString(4,Combo_Com->Items->Strings[Combo_Com->ItemIndex].Length()-3).ToIntDef(0);
YbCommDevice1->Baud = TYbCommDevice::br57600;
YbCommDevice1->Active = true;
上面YbCommDevice1是VCL控件http://www.cppfans.com/
不要花时间用win32 api, 这个控件有经过好几个工业环境的case验证,完全没问题。
※ 引述《sakido (佐米/木子)》之铭言:
: 因为我是接手别人写好的程式,才翻了些书就开始改,所以可能很多基础没有打好。
: 问题是这样的,在开启COM时,COM1~9都没有问题。
: 但在COM10或更大的数字以上时却会产生错误。
: 上网google了很久,大部分都找到说是CreateFile将里面的COMx改成////.//COMx
: 但是我手上的程式完全没有用到这一段,看到比较相关的似乎是用TComPortNumber
: Comm1->CommPort=TComPortNumber(ComPort->ItemIndex);
: 我在这边试着做一些改变,但徒劳无功。
: 虽然有注解,但我还是不太了解网络上找到的这段。
: CreateFile(
: "//.//COM10", // address of name of the communications device
: fdwAccess, // access (read-write) mode
: 0, // share mode
: NULL, // address of security descriptor
: OPEN_EXISTING, // how to create
: 0, // file attributes
: NULL // handle of file with attributes to copy
: );
: 关于开启COM10~不知道有没有哪位大大愿意解释一下,谢谢。
作者: sakido (佐米)   2014-10-06 20:23:00
虽然前面好像没什么问题可是碰到Comm那时用的DynamicArray<byte>的地方又卡住了..试着用unsigned char ,但又不确定是不是可以代替总觉得我基础整个打的不够.....Comm的OutputByte跟YbCommDevice的WritePackage不知道是不是一样的........

Links booklink

Contact Us: admin [ a t ] ucptt.com