//打开串口
CreateFile("\\\\?\\" + FCommName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0); //调用ReadFile时,程序阻塞,当有数据到达时,触发事件去读取
if (ReadFile(FCommHandle, FInputBuffer, FReadLength, ref FReadNumber, ref FOverlappedRead))
{
SetEvent(FOverlappedRead.hEvent);
result = true;
return;
}//读取过程
if (GetOverlappedResult(FCommHandle, FOverlappedRead, ref FReadNumber, false))
{
Buf = new byte[FReadNumber]; for (int I = 0; I <= FReadNumber - 1; I++)
{
Buf[I] = FInputBuffer[I];
} Len = FReadNumber;
//调用ReadFile,重新阻塞
SetupReadEvent();
return result;
}//发送数据
WriteFile(FCommHandle, bArr, iLen, ref BytesWritten, ref FOverlappedWrite);现在的问题时,调用GetOverlappedResult时,提示读写受保护的内存。发送数据时,执行WriteFile时阻塞。有谁用过,谢谢。
CreateFile("\\\\?\\" + FCommName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0); //调用ReadFile时,程序阻塞,当有数据到达时,触发事件去读取
if (ReadFile(FCommHandle, FInputBuffer, FReadLength, ref FReadNumber, ref FOverlappedRead))
{
SetEvent(FOverlappedRead.hEvent);
result = true;
return;
}//读取过程
if (GetOverlappedResult(FCommHandle, FOverlappedRead, ref FReadNumber, false))
{
Buf = new byte[FReadNumber]; for (int I = 0; I <= FReadNumber - 1; I++)
{
Buf[I] = FInputBuffer[I];
} Len = FReadNumber;
//调用ReadFile,重新阻塞
SetupReadEvent();
return result;
}//发送数据
WriteFile(FCommHandle, bArr, iLen, ref BytesWritten, ref FOverlappedWrite);现在的问题时,调用GetOverlappedResult时,提示读写受保护的内存。发送数据时,执行WriteFile时阻塞。有谁用过,谢谢。
[DllImport("Kernel32.dll")] private static extern bool ReadFile( IntPtr hFile, byte[] lpBuffer, uint nNumberOfBytesToRead, ref uint lpNumberOfBytesRead, IntPtr lpOverlapped
);