public string ReadStatus() { String str = String.Empty; if (_opcserver == null) { return("OPC Server Not Connected"); } try { // FIXME : status is a memory leak this memory must be freed! SERVERSTATUS status = _opcserver.GetServerStatus(); LogMessage(sOPCProgId + "\n" + status.ToString(), Logger.DEBUG); //pStatus = System.Runtime.InteropServices.(status, typeof(SERVERSTATUS)); //Marshal.DestroyStructure(pStatus, typeof(SERVERSTATUS)); //Marshal.FreeCoTaskMem(pStatus); } catch (Exception e) { str = "ReadStatus Error: " + e.Message; throw new Exception(str); } finally { } return(str); }
internal static SERVERSTATUS GetServerStatus(ref IntPtr pInput, bool deallocate) { SERVERSTATUS output = new SERVERSTATUS();; if (pInput != IntPtr.Zero) { tagOPCSERVERSTATUS status = (tagOPCSERVERSTATUS)Marshal.PtrToStructure(pInput, typeof(tagOPCSERVERSTATUS)); output.szVendorInfo = status.szVendorInfo; output.ProductVersion = String.Format("{0}.{1}.{2}", status.wMajorVersion, status.wMinorVersion, status.wBuildNumber); output.eServerState = (OPCSERVERSTATE)status.dwServerState; output.StatusInfo = null; if (output.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING) { output.StatusInfo = "OPC_STATUS_RUNNING"; } else if (output.eServerState == OPCSERVERSTATE.OPC_STATUS_FAILED) { output.StatusInfo = "OPC_STATUS_FAILED"; } else if (output.eServerState == OPCSERVERSTATE.OPC_STATUS_NOCONFIG) { output.StatusInfo = "OPC_STATUS_NOCONFIG"; } else if (output.eServerState == OPCSERVERSTATE.OPC_STATUS_SUSPENDED) { output.StatusInfo = "OPC_STATUS_SUSPENDED"; } else if (output.eServerState == OPCSERVERSTATE.OPC_STATUS_TEST) { output.StatusInfo = "OPC_STATUS_TEST"; } long fileT = (((long)status.ftCurrentTime.dwHighDateTime) << 32) + status.ftCurrentTime.dwLowDateTime; //output.StartTime = DateTime.FromFileTime(fileT); output.CurrentTime = DateTime.FromFileTime(fileT); //output.LastUpdateTime = DateTime.FromFileTime(fileT); if (deallocate) { Marshal.DestroyStructure(pInput, typeof(tagOPCSERVERSTATUS)); Marshal.FreeCoTaskMem(pInput); pInput = IntPtr.Zero; } } return(output); }
internal static SERVERSTATUS GetServerStatus(ref IntPtr pInput, bool deallocate) { SERVERSTATUS output = new SERVERSTATUS();; if (pInput != IntPtr.Zero) { tagOPCSERVERSTATUS status = (tagOPCSERVERSTATUS)Marshal.PtrToStructure(pInput, typeof(tagOPCSERVERSTATUS)); output.szVendorInfo = status.szVendorInfo; output.ProductVersion = String.Format("{0}.{1}.{2}", status.wMajorVersion, status.wMinorVersion, status.wBuildNumber); output.eServerState = (OPCSERVERSTATE)status.dwServerState; output.StatusInfo = null; if(output.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING ) output.StatusInfo= "OPC_STATUS_RUNNING"; else if(output.eServerState == OPCSERVERSTATE.OPC_STATUS_FAILED ) output.StatusInfo= "OPC_STATUS_FAILED"; else if(output.eServerState == OPCSERVERSTATE.OPC_STATUS_NOCONFIG ) output.StatusInfo= "OPC_STATUS_NOCONFIG"; else if(output.eServerState == OPCSERVERSTATE.OPC_STATUS_SUSPENDED ) output.StatusInfo= "OPC_STATUS_SUSPENDED"; else if(output.eServerState == OPCSERVERSTATE.OPC_STATUS_TEST ) output.StatusInfo= "OPC_STATUS_TEST"; long fileT = (((long)status.ftCurrentTime.dwHighDateTime) << 32) + status.ftCurrentTime.dwLowDateTime; //output.StartTime = DateTime.FromFileTime(fileT); output.CurrentTime = DateTime.FromFileTime(fileT); //output.LastUpdateTime = DateTime.FromFileTime(fileT); if (deallocate) { Marshal.DestroyStructure(pInput, typeof(tagOPCSERVERSTATUS)); Marshal.FreeCoTaskMem(pInput); pInput = IntPtr.Zero; } } return output; }