private MLResult InternalGetScreensInfo(out List <MLScreensScreenInfo> info) { info = new List <MLScreensScreenInfo>(); _screenInfoList.Initialize(); MLResult.Code resultCode = MLScreensNativeBindings.MLScreensGetScreenInfoListEx(ref _screenInfoList); var result = MLResult.Create(resultCode); if (!result.IsOk) { return(result); } long screensArrayAddress = _screenInfoList.Entries.ToInt64(); for (var i = 0; i < _screenInfoList.Count; ++i) { long entryAddress = screensArrayAddress + i * Marshal.SizeOf(typeof(MLScreensNativeBindings.MLScreensScreenInfoExNative)); var entryPtr = new IntPtr(entryAddress); var entryNative = (MLScreensNativeBindings.MLScreensScreenInfoExNative)Marshal.PtrToStructure(entryPtr, typeof(MLScreensNativeBindings.MLScreensScreenInfoExNative)); MLScreensScreenInfo entry = entryNative.Data; info.Add(entry); } resultCode = MLScreensNativeBindings.MLScreensReleaseScreenInfoListEx(ref _screenInfoList); result = MLResult.Create(resultCode); return(result); }