/// <summary> /// Converts an array of .NET SourceServer objects to COM SourceServer structures. /// </summary> internal static OpcRcw.Dx.SourceServer[] GetSourceServers(SourceServer[] input) { OpcRcw.Dx.SourceServer[] output = null; if (input != null && input.Length > 0) { output = new OpcRcw.Dx.SourceServer[input.Length]; for (int ii = 0; ii < input.Length; ii++) { output[ii] = new OpcRcw.Dx.SourceServer(); output[ii].dwMask = (uint)OpcRcw.Dx.Mask.All; output[ii].szItemName = input[ii].ItemName; output[ii].szItemPath = input[ii].ItemPath; output[ii].szVersion = input[ii].Version; output[ii].szName = input[ii].Name; output[ii].szDescription = input[ii].Description; output[ii].szServerType = input[ii].ServerType; output[ii].szServerURL = input[ii].ServerURL; output[ii].bDefaultSourceServerConnected = (input[ii].DefaultConnected)?1:0; } } return(output); }
/// <summary> /// Converts an array of COM SourceServer structures to .NET SourceServer objects. /// </summary> internal static SourceServer[] GetSourceServers(ref IntPtr pInput, int count, bool deallocate) { SourceServer[] output = null; if (pInput != IntPtr.Zero && count > 0) { output = new SourceServer[count]; IntPtr pos = pInput; for (int ii = 0; ii < count; ii++) { OpcRcw.Dx.SourceServer server = (OpcRcw.Dx.SourceServer)Marshal.PtrToStructure(pos, typeof(OpcRcw.Dx.SourceServer)); output[ii] = new SourceServer(); output[ii].ItemName = server.szItemName; output[ii].ItemPath = server.szItemPath; output[ii].Version = server.szVersion; output[ii].Name = server.szName; output[ii].Description = server.szDescription; output[ii].ServerType = server.szServerType; output[ii].ServerURL = server.szServerURL; output[ii].DefaultConnected = server.bDefaultSourceServerConnected != 0; pos = (IntPtr)(pos.ToInt64() + Marshal.SizeOf(typeof(OpcRcw.Dx.SourceServer))); } if (deallocate) { Marshal.FreeCoTaskMem(pInput); pInput = IntPtr.Zero; } } return(output); }