📄 win32ovrlap.cs
字号:
namespace SerialPorts
{
using System;
using System.Runtime.InteropServices;
internal class Win32Ovrlap
{
// Methods
internal Win32Ovrlap(IntPtr handle, IntPtr evHandle)
{
this.handle = handle;
this.ol = new OVERLAPPED();
this.ol.offset = 0;
this.ol.offsetHigh = 0;
this.ol.hEvent = evHandle;
if (evHandle != IntPtr.Zero)
{
this.memPtr = Marshal.AllocHGlobal(Marshal.SizeOf(this.ol));
Marshal.StructureToPtr(this.ol, this.memPtr, false);
}
}
~Win32Ovrlap()
{
if (this.memPtr != IntPtr.Zero)
{
Marshal.FreeHGlobal(this.memPtr);
}
}
internal bool Get(out uint nSent, bool wait)
{
if (!Win32Ovrlap.GetOverlappedResult(this.handle, this.memPtr, out nSent, wait))
{
int num1 = Marshal.GetLastWin32Error();
if (num1 != 0x3e5)
{
this.fault = "GetOverlappedResult() Failed. System Returned Error Code: " + num1.ToString();
return false;
}
}
return true;
}
[DllImport("kernel32.dll", SetLastError=true)]
private static extern bool GetOverlappedResult(IntPtr hFile, IntPtr lpOverlapped, out uint nNumberOfBytesTransferred, bool bWait);
// Properties
internal string Fault
{
get
{
return this.fault;
}
}
internal IntPtr MemPtr
{
get
{
return this.memPtr;
}
set
{
this.memPtr = value;
}
}
// Fields
private string fault;
private IntPtr handle;
private IntPtr memPtr;
private OVERLAPPED ol;
// Nested Types
[StructLayout(LayoutKind.Sequential)]
internal protected struct OVERLAPPED
{
internal UIntPtr internalLow;
internal UIntPtr internalHigh;
internal uint offset;
internal uint offsetHigh;
internal IntPtr hEvent;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -