⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win32ovrlap.cs

📁 常见的串口通信程序
💻 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 + -