コード例 #1
0
ファイル: DriverImpl.cs プロジェクト: Gallentboy/-
        //C++ syntax : HRESULT STDMETHODCALLTYPE CompileDevAddr(LPSTR szLibName, LPSTR szAddr, DEVADDR* lpDevAddr, VARIANT_BOOL * pRetVal);
        public bool CompileDevAddr([MarshalAs(UnmanagedType.LPStr)] string LibName, [MarshalAs(UnmanagedType.LPStr)] string Addr, IntPtr pDevAddr)
        {
            strLastError = "";
            if (string.IsNullOrEmpty(LibName) || string.IsNullOrEmpty(Addr) || pDevAddr == IntPtr.Zero)
            {
                strLastError = "调用参数错误。";
                return(false);
            }

            UCView.DEVADDR DevAddr = pDevAddr.GetStructure <UCView.DEVADDR>();
            if (Addr.Length == 0)
            {
                strLastError = "缺少寄存器地址";
                return(false);
            }
            for (int i = 0; i < Addr.Length; i++)
            {
                if (g_szDevAddrChars.IndexOf(Addr[i]) < 0)
                {
                    strLastError = "设备地址应为数字。";
                    return(false);
                }
            }
            DevAddr.nAddr = int.Parse(Addr);
            if (DevAddr.nAddr < 0 || DevAddr.nAddr > MAX_DEV_ADDR)
            {
                strLastError = "地址定义越界。";
                return(false);
            }
            DevAddr.StructureToPtr <UCView.DEVADDR>(ref pDevAddr);
            return(true);
        }
コード例 #2
0
ファイル: DriverImpl.cs プロジェクト: Gallentboy/-
        //C++ syntax : HRESULT STDMETHODCALLTYPE Diagnose(LPSTR szLibName, DEVADDR * lpDevAddr, VARIANT_BOOL * pRetVal);
        public bool Diagnose([MarshalAs(UnmanagedType.LPStr)] string LibName, IntPtr pDevAddr)
        {
            strLastError = "";
            if (string.IsNullOrEmpty(LibName) || pDevAddr == IntPtr.Zero)
            {
                strLastError = "调用参数错误。";
                return(false);
            }
            UCView.DEVADDR DevAddr = (UCView.DEVADDR)Marshal.PtrToStructure(pDevAddr, typeof(UCView.DEVADDR));
            //	if (time(NULL)-pThis->m_tLastInitComm > 3600)
            {
                if (InitComm() == false)
                {
                    return(false);
                }

                WinApi.Sleep(500);
            }
            try
            {
                //ToDo: check your device to see if it is all right
                UCView.DATAFRAME commonFrame = new UCView.DATAFRAME();
                //Format youe Common Frame according to szLibName
                commonFrame.pszLibName         = Marshal.StringToHGlobalAnsi(LibName);
                commonFrame.DevAddr            = DevAddr;
                commonFrame.RegType            = 0;//A very common register
                commonFrame.StartRegAddr.nAddr = 0;
                commonFrame.EndRegAddr.nAddr   = 0;
                commonFrame.WRType             = UCView.FT_READ;

                return(AccessDevice(ref commonFrame));
            }
            catch
            {
                Utility.Trace2Logger(atomMsgSrcName, "Diagnose 遇到异常");
                return(false);
            }
        }