我用API函数写的串口通信,在发送字符时,WriteFile(hCom,&c,length,&length,&m_osWrite);函数总是使用错误,错误号为87,查csdn,这个错误是The parameter is incorrect。请问是怎么回事,具体是哪个参数有问题?
解决方案 »
- 关于代码分离采用什么方法比较好???
- 【愚人节】散个分吧
- 请教简单问题
- 一个界面问题,高手请指点。
- 请问FindFirstFile系列API能处理类似"\\10.0.4.100\\mpeg\\*.*"的远程查找么?
- 请问WPARAM wparam,LPARAM lparam这两个参数是什么意思?干什么用?
- 如何将一个整型的数"5"转换成VARIANT类型的变量va
- help me:如何调整控件Property Sheet大小?
- 自己写了一个VC函数,功能与DrawFocusRect类似,但是根据鼠标移动画出了一连串的矩形???
- 关于哈夫曼树编码与译码的实现
- 在PutCollect中如何转换char型变量?
- 这是为什么啊?我晕了。大虾救我。
你的两个length有错误。
函数原型:
BOOL WriteFile(
HANDLE hFile, // handle to file
LPCVOID lpBuffer, // data buffer
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // number of bytes written
LPOVERLAPPED lpOverlapped // overlapped buffer
);
请注意看以下对你传入length参数的说明:
nNumberOfBytesToWrite
[in] Specifies the number of bytes to write to the file.
A value of zero specifies a null write operation. A null write operation does not write any bytes but does cause the time stamp to change. Named pipe write operations across a network are limited to 65,535 bytes. lpNumberOfBytesWritten
[out] Pointer to the variable that receives the number of bytes written. WriteFile sets this value to zero before doing any work or error checking.
=====
lpNumberOfBytesWritten 是个输出参数,用来返回数据的。
WriteFile sets this value to zero before doing any work or error checking.
就是说,这个函数在做所有事情之前,首先干的工作是将它设置为0。因为你传入和输出用的都是length这一个变量,那么由于这个函数首先将length设置为0了,那么你传入的length也就是0了,自然会报告参数错误了。你写入0个数据自然有问题了。
HANDLE hFile, // handle to file
LPCVOID lpBuffer, // data buffer
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // number of bytes written
LPOVERLAPPED lpOverlapped // overlapped buffer
);
HANDLE hFile, // handle to file
LPCVOID lpBuffer, // data buffer
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // number of bytes written
LPOVERLAPPED lpOverlapped // overlapped buffer
);容易出错的地方:
lpBuffer不是常量,lpOverlapped不匹配,
第三和第四个参数不能用同一个,
unsigned long aa;
OVERLAPPED npTTYInfo;
npTTYInfo.Offset = 0;
npTTYInfo.OffsetHigh = 0;
npTTYInfo.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
if(npTTYInfo.hEvent == NULL)
return ;
char szBuffer[256]="#0199oo\r";
fWriteStat = WriteFile(hCom, szBuffer,10,&aa, &npTTYInfo); //写数据
看MSDN,CreateFile,WriteFile关于异步方式的说明