我用DELPHI实现WINDOWS超级终端功能,写了个DLL文件来获取COM端口的获取的值,但是就是连接不上 以下是我的代码:
const
MaxM = 12;{$R *.res}function ReadCard(filepathP, wsnmP, keyidP, errstrP: Pchar): Boolean;
var
Comport: TComPort;
fini: TIniFile;
filepath, wsnm, keyid, errstr: string;
str, comPundRateStr, comStr, stopBitsStr, DataBitsStr, ParityStr: string;
i, com, LsRet: byte;
//buf: array[0..100] of char;
begin
filepath := strpas(filepathP);
wsnm := strpas(wsnmP);
keyid := strpas(keyidP);
errstr := strpas(errstrP);
i := 1;
com := 1;
keyid := '';
if not fileExists(filepath + 'posini.ini') then
begin
errstr := '未发现ID读卡机配置文件posini.ini';
Result := false;
Exit;
end
else
begin
try
fini := TIniFile.Create(filepath + 'posini.ini');
comPundRateStr := fini.ReadString('ID卡', 'ID卡波特率', '1200');
comStr := fini.ReadString('ID卡', 'ID卡串口号', 'com1');
stopBitsStr := fini.ReadString('ID卡', '终止位', '0');
DataBitsStr := fini.ReadString('ID卡', '数据位', '8');
ParityStr := fini.ReadString('ID卡', '校验位', '0');
finally
fini.Free;
end;
if Comport = nil then
Comport := Tcomport.Create(Application);
Comport.Port := comStr;
case strtoInt(comPundRateStr) of
110: Comport.BaudRate := br110;
11520: Comport.BaudRate := br115200;
1200: Comport.BaudRate := br1200; //ID卡刷卡机器默认值
128000: Comport.BaudRate := br128000;
14400: Comport.BaudRate := br14400;
19200: Comport.BaudRate := br19200;
2400: Comport.BaudRate := br2400;
256000: Comport.BaudRate := br256000;
300: Comport.BaudRate := br300;
38400: Comport.BaudRate := br38400;
4800: Comport.BaudRate := br4800;
56000: Comport.BaudRate := br56000;
57600: Comport.BaudRate := br57600;
600: Comport.BaudRate := br600;
9600: Comport.BaudRate := br9600;
else
Comport.BaudRate := br1200;
end;
Comport.stopBits := sbonestopbit;
case strtoInt(DataBitsStr) of
5: Comport.DataBits := dbfive;
6: Comport.DataBits := dbsix;
7: Comport.DataBits := dbseven;
8: Comport.DataBits := dbEight; //ID卡刷卡机器默认值
else
Comport.DataBits := dbEight;
end; case strtoInt(ParityStr) of
0: Comport.Parity.bits := prNone; //ID卡刷卡机器默认值
1: Comport.Parity.bits := prodd;
2: Comport.Parity.bits := preven;
3: Comport.Parity.bits := pr;
4: Comport.Parity.bits := prspace;
else
Comport.Parity.bits := prNone;
end;
Comport.Buffer.InputSize := 3072;
Comport.Buffer.OutputSize := 2048;
if not Comport.Connected then
begin
try
Comport.Open;
except
str := '';
errstr := '打开失败';
Result := false;
end;
end;
while com < 2000 do
begin
sleep(300);
while i < MaxM do
begin
sleep(50);
LsRet := Comport.ReadStr(str, 1);
if LsRet <= 0 then
break;
keyid := str + keyid;
i := i + 1;
end;
com := com + 1;
end;
if errstr <> '' then
begin
Result := false; //表示有错误
end
else
begin
Result := true; //无错误
end;
Comport.Close;
Comport.Free;
Comport := nil; end;
end;exports ReadCard;读取的是配置文件里的信息,已经读取成功.我自己写了一个DEMO,但是刷卡后就是读不出数据.我可以肯定的是DEMO没问题.请各位大侠们看看我这个DLL函数,是不是没有实现超级终端功能
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货