D
dongym
Unregistered / Unconfirmed
GUEST, unregistred user!
D5中一个在Win95下运行十分成功的串口操作,为什么在WinNT会出差错呢?
难道在CreateFile或WriteFile时函数参数要做一点变更吗?请各位大侠帮助
分析一下,不胜感谢!
//*******************变量定义**************************
hcom : THandle; //hFile
pdcb : TDcb; //_DCB;
pcomstat : TComstat; //_ComStat//PComstat
lpErrors : Cardinal
p : POverlapped;
dwBytesSent : DWORD; //Caidinal
TransBuf : array[0..15] of Byte //发送缓冲区
//*******************过程体内容************************//
hcom := CreateFile( 'COM1',
GENERIC_READ or GENERIC_WRITE,
0, // exclusive access
nil, // no security attrs
CREATE_NEW, //OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, // overlapped I/O
0);
if hCom = INVALID_HANDLE_VALUE then
begin
ShowMessage('串口未能正确打开');
close;
end;
GetCommState(hCom, pdcb);
//然后对pdcb的各参数赋值
SetCommState(hCom,pdcb);
SetCommMask(hCom ,EV_RXCHAR);
//ClearCommError(hCom,lpErrors ,PComStat(pcomstat));
SetupComm(hCom, 4096, 4096);
PurgeComm(hCom,PURGE_TXABORT or PURGE_RXABORT or
PURGE_TXCLEAR or PURGE_RXCLEAR );
//以上未检测到错误
//*******************写串口***************************
//对TransBuf赋值后
WriteFile(hCom,TransBuf,16,dwBytesSent,p); //p=nil,dwBytesSent=0
//此处用GetLastError()检测到WriteFile操作有参数错误(错误代码为87)
//以下其他操作无法正常进行
//******************过程体内容结束********************
疑问一:
ClearCommError(hCom,pdwErrorFlags,pcomstat)无论如何也不能用,本函数
要求第三个参数为PComStat类型,但pcomstat置成PComStat类型、TComstat
类型或_ComStat类型时,编译时均提示参数类型不匹配(95和NT下均如此)
疑问二:
WriteFile(hCom,TransBuf,16,dwBytesSent,p)要求第四个参数为Caidinal
类型,实际上为一个指针值,但第四个参数若取为@dwBytesSent或
Addr(dwBytesSent),编译不通过,取为dwBytesSent时,Win95下正常实现。
难道在CreateFile或WriteFile时函数参数要做一点变更吗?请各位大侠帮助
分析一下,不胜感谢!
//*******************变量定义**************************
hcom : THandle; //hFile
pdcb : TDcb; //_DCB;
pcomstat : TComstat; //_ComStat//PComstat
lpErrors : Cardinal
p : POverlapped;
dwBytesSent : DWORD; //Caidinal
TransBuf : array[0..15] of Byte //发送缓冲区
//*******************过程体内容************************//
hcom := CreateFile( 'COM1',
GENERIC_READ or GENERIC_WRITE,
0, // exclusive access
nil, // no security attrs
CREATE_NEW, //OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, // overlapped I/O
0);
if hCom = INVALID_HANDLE_VALUE then
begin
ShowMessage('串口未能正确打开');
close;
end;
GetCommState(hCom, pdcb);
//然后对pdcb的各参数赋值
SetCommState(hCom,pdcb);
SetCommMask(hCom ,EV_RXCHAR);
//ClearCommError(hCom,lpErrors ,PComStat(pcomstat));
SetupComm(hCom, 4096, 4096);
PurgeComm(hCom,PURGE_TXABORT or PURGE_RXABORT or
PURGE_TXCLEAR or PURGE_RXCLEAR );
//以上未检测到错误
//*******************写串口***************************
//对TransBuf赋值后
WriteFile(hCom,TransBuf,16,dwBytesSent,p); //p=nil,dwBytesSent=0
//此处用GetLastError()检测到WriteFile操作有参数错误(错误代码为87)
//以下其他操作无法正常进行
//******************过程体内容结束********************
疑问一:
ClearCommError(hCom,pdwErrorFlags,pcomstat)无论如何也不能用,本函数
要求第三个参数为PComStat类型,但pcomstat置成PComStat类型、TComstat
类型或_ComStat类型时,编译时均提示参数类型不匹配(95和NT下均如此)
疑问二:
WriteFile(hCom,TransBuf,16,dwBytesSent,p)要求第四个参数为Caidinal
类型,实际上为一个指针值,但第四个参数若取为@dwBytesSent或
Addr(dwBytesSent),编译不通过,取为dwBytesSent时,Win95下正常实现。